题意:

给出一排座位现在要让所有学生入座,每个座位都有颜色,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)相关推荐

  1. HDU 2476 String painter (区间DP)

    题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...

  2. hdu 4597 + uva 10891(一类区间dp)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...

  3. HDU 5115 Dire Wolf ——(区间DP)

    比赛的时候以为很难,其实就是一个区间DP= =..思路见:点我. 区间DP一定要记住先枚举区间长度啊= =~!因为区间dp都是由短的区间更新长的区间的,所以先把短的区间更新完.. 代码如下: 1 #i ...

  4. hdu 5151 Sit sit sit(区间dp+排列组合)

    题目链接:hdu 5151 Sit sit sit 题意: 一共有并排N个椅子, N个学生依次去坐,同时满足3个条件就不能坐下去: 1,该椅子不在最左,不在最右. 2,该椅子左右都有人坐了. 3,左右 ...

  5. HDU 5151 Sit sit sit 区间DP + 排列组合

    Sit sit sit 问题描述 在一个XX大学中有NN张椅子排成一排,椅子上都没有人,每张椅子都有颜色,分别为蓝色或者红色. 接下来依次来了NN个学生,标号依次为1,2,3,...,N. 对于每个学 ...

  6. Sit sit sit HDU - 5151 (区间dp +组合计数)

    这道这道区间DP,我也开始觉得其实区间DP是一种应用型的思想,做这类题目一个重要的点是在于题目情景的把握,这道题的一个情景就是数学的排列组合问题. 首先应用根据小区间推出大区间的思路,我们可以先固定一 ...

  7. hdu_5151_Sit sit sit(区间DP)

    传送门 题意:有n张椅子,n个人,所有人都可以按照任意顺序坐在任意一张椅子上,但是满足这三种情况的椅子不会有人坐: 1.椅子上有左右两张相邻的椅子. 2.左右相邻的椅子不是空的. 3.左右相邻的椅子颜 ...

  8. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  9. HDU 5693 D Game 区间dp

    D Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它 ...

最新文章

  1. python使用matplotlib可视化不同年份、不同项目的均值(mean)对比条形图(bar plot comparision of mean with different years)
  2. python函数进阶小结_Python-进阶-functools模块小结
  3. python和前端之HTML的激情
  4. WYSE率先支持RemoteFX功能
  5. asp.net gridview删除 获取到第一行第一列的单元格内容_VBA中的常用单元格引用方式...
  6. gtk 控件内存回收_咱们从头到尾说一次 Java 垃圾回收
  7. stm32之TIM-高级定时器应用实例二(测量频率和占空比)
  8. Java黑皮书课后题第5章:*5.47(商业:检测ISBN-13)ISBN-13是标识书籍的新标准。它使用13位数字d1d2d3~d12d13,d13是校验和。如果校验和为10,则替换为0。求所有数字
  9. 斩获2019 Thales AIChallenge4Health第一,腾讯优图医疗AI再获突破
  10. Flutter之基本数据类型测试
  11. 系统什么时候会用到swap分区?
  12. 面试中经常会被问到的70个问题
  13. Python拓展12(使配置文件生效ConfigParser模块)
  14. 【POJ】2823 Sliding Window
  15. 解决UTF-8方法归纳
  16. 【渝粤教育】 广东开放大学21秋期末考试基础会计10258k2
  17. Java SE到Java EE的学习转换
  18. ASP.NET项目创建
  19. Windows 10 的系统要求
  20. php网页制作代码_如何制作一个简单的HTML登录页面(附代码)

热门文章

  1. 基于 Kafka 和 ZooKeeper 的分布式消息队列原理
  2. 接口,常用接口,列表ArrayList,泛型,Dictionary(字典),Dictionary版-火星文翻译器,其他集合类...
  3. 非洲年轻人期望用加密货币付款
  4. webgl添加环境光示例
  5. matlab 曲线法线,平面曲线的切线及法线.ppt
  6. mac笔记本怎么外接显示屏_Macbook Pro 用外接显示器时,如何关闭笔记本屏幕,同时开盖使用?...
  7. 基于属性的加密(ABE)
  8. ​闻所未闻的远程工作见解,听听看?
  9. 【Redis源码剖析】 - Redis持久化之RDB
  10. NEUQ-ACM预备队-week8-DP2