题目链接:hdu 5151 Sit sit sit

题意:

一共有并排N个椅子, N个学生依次去坐,同时满足3个条件就不能坐下去:

1,该椅子不在最左,不在最右。

2,该椅子左右都有人坐了。

3,左右的椅子不同颜色。
求最后N个人都能坐下去,有多少不同的情况.

题解:

考虑区间dp,dp[i][j] = sum(dp[i][k-1] * dp[k+1][j] * c[j - i][k - i])其中满足(v[k-1]==v[k+1])

表示i到j区间最后来坐k位置,乘组合是因为合并这两段区间的时候,j-i个人中选择k-i个人去坐左区间的位置,剩下的就坐右区间的位置。

 1 #include<bits/stdc++.h>
 2 #define mst(a,b) memset(a,b,sizeof(a))
 3 #define F(i,a,b) for(int i=a;i<=b;++i)
 4 using namespace std;
 5 typedef long long ll;
 6 const int P=1e9+7,N=107;
 7
 8 ll c[N][N],dp[N][N];
 9 int n,v[N];
10
11 void Init()
12 {
13     for(int i=0;i<=100;i++)
14     {
15         c[i][0]=c[i][i]=1;
16         for(int j=1;j<i;j++)c[i][j]=(c[i-1][j]+c[i-1][j-1])%P;
17     }
18 }
19
20 int main()
21 {
22     Init();
23     while(~scanf("%d",&n))
24     {
25         F(i,1,n)scanf("%d",v+i);
26         mst(dp,0);
27         F(i,1,n)dp[i][i]=1;
28         F(l,2,n)F(i,1,n-l+1)
29         {
30             int j=i+l-1;
31             dp[i][j]=(dp[i+1][j]+dp[i][j-1])%P;
32             F(k,i+1,j-1)if(v[k-1]==v[k+1])
33             {
34                 dp[i][j]=(dp[i][j]+dp[i][k-1]*dp[k+1][j]%P*c[j-i][k-i])%P;
35             }
36         }
37         printf("%lld\n",dp[1][n]);
38     }
39     return 0;
40 }

View Code

转载于:https://www.cnblogs.com/bin-gege/p/6424579.html

hdu 5151 Sit sit sit(区间dp+排列组合)相关推荐

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

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

  2. HDU 2476 String painter (区间DP)

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

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

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

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

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

  5. bzoj 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——前缀和优化dp / 排列组合

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 好简单呀.而且是自己想出来的. dp[ i ]表示最后一个牡牛在 i 的方案数. 当前 ...

  6. hdu 5155(DP+排列组合)

    问题描述 一个盒子由n*m个格子组成,有一些格子里会有闪闪发光的宝石. 现在有求盒子从左边看过去,每一行都闪烁着光芒,从前面看过去,每一列也都闪烁着光芒. 问:盒子里的宝石有多少种分布情况. 答案有可 ...

  7. hdu 5151 Sit sit sit(区间dp)

    题意: 给出一排座位现在要让所有学生入座,每个座位都有颜色,0表示蓝色,1表示红色,但是如果同时满足以下条件学生就不会坐下这个位置: 1.座位的左右都有座位 2.座位的左右都有人坐下了 3.座位的左右 ...

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

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

  9. hdu_5151_Sit sit sit(区间DP)

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

最新文章

  1. 单节点部署Hadoop教程
  2. java中List、Map、Set、Collection、Stack、Queue等的使用
  3. 图像风格迁移cvpr2020_CVPR 2020 | 浙大李俊成:用无监督强化学习方法来获得迁移能力...
  4. 利用Spring的AbstractRoutingDataSource解决多数据源的读写分离问题
  5. 最新数据:中国网民超10亿,中老年群体增速最快
  6. UI中国转的产品知识
  7. Windows server 2008 iis7 下配置PHP+MySql
  8. Android控件开发之Gallery3D酷炫效果(带源码)
  9. ClientToScreen 和ScreenToClient 用法
  10. django models 数据库 update_or_create 更新或者插入
  11. 白泽六足机器人_ros_v1——零件准备
  12. 关于在win10电脑开启移动热点,手机连上wifi显示无互联网连接的问题
  13. python趣味编程100例-儿童Python趣味编程课程
  14. provider: SQL Network Interfaces , error: 26 - Error Locating Server / Instance
  15. 移动H5前端性能优化指南(转自ISUX)
  16. java respose输出mp4,使用safari读取通过servlet返回的MP4视频文件报错
  17. ensp启动设备蓝屏_超全超详细的电脑蓝屏问题解决方案汇总
  18. 毕设IDEA2019之ssm多表分页模糊查询(PageHelper插件)
  19. 最新selenium3匹配的火狐版本
  20. python 一个通用的POC模板

热门文章

  1. 智能网联汽车通信场景简介
  2. 【智能物流】分分钟了解透彻自动化立体仓库
  3. Linux总体大纲总结
  4. 如何Word转PDF?Word转换成PDF转换器哪个好
  5. Dropout as a Bayesian Approximation: Representing Model Uncertainty Learning
  6. 除了平头哥,这个AI产品将影响互联网下半场
  7. 用PaddleDetection做一个完整的目标检测项目(上)
  8. c# 变量不可访问,因为它具有一定的保护级别
  9. mysql 删表卡死_如何解决mysql 删表卡住的问题
  10. Anders Hejlsberg访谈:Checked Exceptions的问题