hdu 5151 Sit sit sit(区间dp)
题意:
给出一排座位现在要让所有学生入座,每个座位都有颜色,0表示蓝色,1表示红色,但是如果同时满足以下条件学生就不会坐下这个位置:
1、座位的左右都有座位
2、座位的左右都有人坐下了
3、座位的左右的颜色不同
题解:
明显的区间计数类dp
状态dp[i][j] 表示i到j区间的方案个数!
那么枚举中间点k作为最后入座的学生。之前先预处理下排列组合的数组。
状态返程 dp[i][j]=max{ dp[i][k-1]*dp[k+1][j]*C[j-i][k-i] } 很显然用乘,应为左右的方案数相符组合
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
typedef __int64 lld;
#define oo 0x3f3f3f3f
#define Mod 1000000007
#define maxn 105
lld dp[maxn][maxn];
lld C[maxn][maxn];
int sit[maxn];void GetC()
{for(int i=0;i<maxn;i++){C[i][0]=C[i][i]=1;for(int j=1;j<i;j++)C[i][j]=(C[i-1][j-1]+C[i-1][j])%Mod;}
}int main()
{GetC();int n;while(scanf("%d",&n)!=EOF){for(int i=1;i<=n;i++)scanf("%d",&sit[i]);memset(dp,0,sizeof dp);for(int i=1;i<=n;i++)dp[i][i]=dp[i][i-1]=dp[i+1][i]=1;for(int L=2;L<=n;L++){for(int i=1;i+L-1<=n;i++){int j=i+L-1;for(int k=i;k<=j;k++)if(k==i||k==j||sit[k-1]==sit[k+1])dp[i][j]=(dp[i][j]+dp[i][k-1]*dp[k+1][j]%Mod*C[j-i][k-i]%Mod)%Mod;//k-1-i+1=k-i;}}printf("%I64d\n",dp[1][n]);}return 0;
}
hdu 5151 Sit sit sit(区间dp)相关推荐
- HDU 2476 String painter (区间DP)
题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...
- hdu 4597 + uva 10891(一类区间dp)
题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...
- HDU 5115 Dire Wolf ——(区间DP)
比赛的时候以为很难,其实就是一个区间DP= =..思路见:点我. 区间DP一定要记住先枚举区间长度啊= =~!因为区间dp都是由短的区间更新长的区间的,所以先把短的区间更新完.. 代码如下: 1 #i ...
- hdu 5151 Sit sit sit(区间dp+排列组合)
题目链接:hdu 5151 Sit sit sit 题意: 一共有并排N个椅子, N个学生依次去坐,同时满足3个条件就不能坐下去: 1,该椅子不在最左,不在最右. 2,该椅子左右都有人坐了. 3,左右 ...
- HDU 5151 Sit sit sit 区间DP + 排列组合
Sit sit sit 问题描述 在一个XX大学中有NN张椅子排成一排,椅子上都没有人,每张椅子都有颜色,分别为蓝色或者红色. 接下来依次来了NN个学生,标号依次为1,2,3,...,N. 对于每个学 ...
- Sit sit sit HDU - 5151 (区间dp +组合计数)
这道这道区间DP,我也开始觉得其实区间DP是一种应用型的思想,做这类题目一个重要的点是在于题目情景的把握,这道题的一个情景就是数学的排列组合问题. 首先应用根据小区间推出大区间的思路,我们可以先固定一 ...
- hdu_5151_Sit sit sit(区间DP)
传送门 题意:有n张椅子,n个人,所有人都可以按照任意顺序坐在任意一张椅子上,但是满足这三种情况的椅子不会有人坐: 1.椅子上有左右两张相邻的椅子. 2.左右相邻的椅子不是空的. 3.左右相邻的椅子颜 ...
- HDU 5115 Dire Wolf 区间dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...
- HDU 5693 D Game 区间dp
D Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它 ...
最新文章
- python使用matplotlib可视化不同年份、不同项目的均值(mean)对比条形图(bar plot comparision of mean with different years)
- python函数进阶小结_Python-进阶-functools模块小结
- python和前端之HTML的激情
- WYSE率先支持RemoteFX功能
- asp.net gridview删除 获取到第一行第一列的单元格内容_VBA中的常用单元格引用方式...
- gtk 控件内存回收_咱们从头到尾说一次 Java 垃圾回收
- stm32之TIM-高级定时器应用实例二(测量频率和占空比)
- Java黑皮书课后题第5章:*5.47(商业:检测ISBN-13)ISBN-13是标识书籍的新标准。它使用13位数字d1d2d3~d12d13,d13是校验和。如果校验和为10,则替换为0。求所有数字
- 斩获2019 Thales AIChallenge4Health第一,腾讯优图医疗AI再获突破
- Flutter之基本数据类型测试
- 系统什么时候会用到swap分区?
- 面试中经常会被问到的70个问题
- Python拓展12(使配置文件生效ConfigParser模块)
- 【POJ】2823 Sliding Window
- 解决UTF-8方法归纳
- 【渝粤教育】 广东开放大学21秋期末考试基础会计10258k2
- Java SE到Java EE的学习转换
- ASP.NET项目创建
- Windows 10 的系统要求
- php网页制作代码_如何制作一个简单的HTML登录页面(附代码)
热门文章
- 基于 Kafka 和 ZooKeeper 的分布式消息队列原理
- 接口,常用接口,列表ArrayList,泛型,Dictionary(字典),Dictionary版-火星文翻译器,其他集合类...
- 非洲年轻人期望用加密货币付款
- webgl添加环境光示例
- matlab 曲线法线,平面曲线的切线及法线.ppt
- mac笔记本怎么外接显示屏_Macbook Pro 用外接显示器时,如何关闭笔记本屏幕,同时开盖使用?...
- 基于属性的加密(ABE)
- ​闻所未闻的远程工作见解,听听看?
- 【Redis源码剖析】 - Redis持久化之RDB
- NEUQ-ACM预备队-week8-DP2