hdu 5151 Sit sit sit(区间dp+排列组合)
题目链接: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个人去坐左区间的位置,剩下的就坐右区间的位置。
![](/assets/blank.gif)
![](/assets/blank.gif)
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+排列组合)相关推荐
- HDU 5151 Sit sit sit 区间DP + 排列组合
Sit sit sit 问题描述 在一个XX大学中有NN张椅子排成一排,椅子上都没有人,每张椅子都有颜色,分别为蓝色或者红色. 接下来依次来了NN个学生,标号依次为1,2,3,...,N. 对于每个学 ...
- 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 ...
- bzoj 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——前缀和优化dp / 排列组合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 好简单呀.而且是自己想出来的. dp[ i ]表示最后一个牡牛在 i 的方案数. 当前 ...
- hdu 5155(DP+排列组合)
问题描述 一个盒子由n*m个格子组成,有一些格子里会有闪闪发光的宝石. 现在有求盒子从左边看过去,每一行都闪烁着光芒,从前面看过去,每一列也都闪烁着光芒. 问:盒子里的宝石有多少种分布情况. 答案有可 ...
- hdu 5151 Sit sit sit(区间dp)
题意: 给出一排座位现在要让所有学生入座,每个座位都有颜色,0表示蓝色,1表示红色,但是如果同时满足以下条件学生就不会坐下这个位置: 1.座位的左右都有座位 2.座位的左右都有人坐下了 3.座位的左右 ...
- Sit sit sit HDU - 5151 (区间dp +组合计数)
这道这道区间DP,我也开始觉得其实区间DP是一种应用型的思想,做这类题目一个重要的点是在于题目情景的把握,这道题的一个情景就是数学的排列组合问题. 首先应用根据小区间推出大区间的思路,我们可以先固定一 ...
- hdu_5151_Sit sit sit(区间DP)
传送门 题意:有n张椅子,n个人,所有人都可以按照任意顺序坐在任意一张椅子上,但是满足这三种情况的椅子不会有人坐: 1.椅子上有左右两张相邻的椅子. 2.左右相邻的椅子不是空的. 3.左右相邻的椅子颜 ...
最新文章
- 单节点部署Hadoop教程
- java中List、Map、Set、Collection、Stack、Queue等的使用
- 图像风格迁移cvpr2020_CVPR 2020 | 浙大李俊成:用无监督强化学习方法来获得迁移能力...
- 利用Spring的AbstractRoutingDataSource解决多数据源的读写分离问题
- 最新数据:中国网民超10亿,中老年群体增速最快
- UI中国转的产品知识
- Windows server 2008 iis7 下配置PHP+MySql
- Android控件开发之Gallery3D酷炫效果(带源码)
- ClientToScreen 和ScreenToClient 用法
- django models 数据库 update_or_create 更新或者插入
- 白泽六足机器人_ros_v1——零件准备
- 关于在win10电脑开启移动热点,手机连上wifi显示无互联网连接的问题
- python趣味编程100例-儿童Python趣味编程课程
- provider: SQL Network Interfaces , error: 26 - Error Locating Server / Instance
- 移动H5前端性能优化指南(转自ISUX)
- java respose输出mp4,使用safari读取通过servlet返回的MP4视频文件报错
- ensp启动设备蓝屏_超全超详细的电脑蓝屏问题解决方案汇总
- 毕设IDEA2019之ssm多表分页模糊查询(PageHelper插件)
- 最新selenium3匹配的火狐版本
- python 一个通用的POC模板
热门文章
- 智能网联汽车通信场景简介
- 【智能物流】分分钟了解透彻自动化立体仓库
- Linux总体大纲总结
- 如何Word转PDF?Word转换成PDF转换器哪个好
- Dropout as a Bayesian Approximation: Representing Model Uncertainty Learning
- 除了平头哥,这个AI产品将影响互联网下半场
- 用PaddleDetection做一个完整的目标检测项目(上)
- c# 变量不可访问,因为它具有一定的保护级别
- mysql 删表卡死_如何解决mysql 删表卡住的问题
- Anders Hejlsberg访谈:Checked Exceptions的问题