当前位置: 首页 > news >正文

HDU Sit sit sit (区间DP+组合数)

题目大意:有 n 张椅子,n 个人,所有人都可以按照任意顺序坐在任意一张椅子上,但是同时满足这三种情况的椅子不能坐:
1.椅子上有左右两张相邻的椅子。
2.左右相邻的椅子不是空的。
3.左右相邻的椅子颜色不同。
如果当前学生没有椅子可以坐,他就会离开。

问一共有几种坐法?

思路:区间dp+组合数

dp[i][j] : 记录在 i ~ j 之间满足题目要求的排列数。

C[i][j] : (组合数)在 i 个人中挑选 j 个人。

在长度为 1 的时候,排列数肯定为 1,在长度为 2的时候排列数肯定为 2,当长度大于等于 3 的时候就要开始分裂类讨论了。第一种情况最有一个人坐在两边的情况,第二种情况最后一个人不坐在两边的情况。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
const int N=1e2+5;
const int mod=1e9+7;
int a[N],dp[N][N],C[N][N];
signed main(){for(int i=0;i<=101;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 n;while(cin >> n){for(int i=1;i<=n;i++){cin >> a[i];dp[i][i]=1;//长度为 1 ,有一种排列方式 if(i+1<=n) dp[i][i+1]=2; // 长度为 2,有两种排列方式 }for(int len=2;len<n;len++){for(int i=1;i<=n;i++){int j=i+len;if(j>n) break;dp[i][j]=(dp[i+1][j]+dp[i][j-1])%mod;//最后一个人坐在两边的情况 for(int k=i+1;k<j;k++){if(a[k-1]==a[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 个位置且满足题目要求的情况 //j-i就是当前长度 len( k 除外),k-i就是在 k 之前的位置的个数,C[j-i][k-i]就是在(j-i)个人里挑(k-i)个人坐到 k 前面的那几个位子去 }}}cout << dp[1][n] << endl;}return 0;
}

http://www.lryc.cn/news/454547.html

相关文章:

  • Qt开发技巧(十四)文字的分散对齐,设置动态库路径,进度条控件的文本,文件对话框的卡顿,滑块控件的进度颜色,停靠窗体的排列,拖拽事件的坑
  • VirtulBOX Ubuntu22安装dpdk23.11
  • 线性代数书中求解齐次线性方程组、非齐次线性方程组方法的特点和缺陷(附实例讲解)
  • 初识算法 · 双指针(2)
  • React常见面试题目
  • 图解网络OSI模型与TCP/IP
  • 15分钟学 Python 第31天 :Web Scraping
  • 前端编程艺术(2)----CSS
  • 前端的全栈混合之路Meteor篇(二):RPC方法注册及调用
  • 重学SpringBoot3-集成Redis(三)之注解缓存策略设置
  • 【C++11】新特性
  • 【游戏模组】重返德军总部2009高清重置MOD,建模和材质全部重置,并且支持光追效果,游戏画质大提升
  • CGLib动态代理和JDK动态代理Demo、ASM技术尝鲜
  • [C++]使用纯opencv部署yolov11-pose姿态估计onnx模型
  • python you-get下载视频
  • SCUC博客摘录「 储能参与电能市场联合出清:SCUC和SCED模型应用于辅助服务调频市场(IEEE39节点系统)」2024年10月6日
  • Git分支-团队协作以及GitHub操作
  • 力扣刷题 | 两数之和
  • [C#]winform部署官方yolov11-obb旋转框检测的onnx模型
  • 【GC日志和OOM日志分析】JVM GC日志和OOM Dump文件分析
  • 【电路】1.1 实际电路和电路模型
  • Vue - 打包部署
  • spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)
  • springboot项目中属性的使用优先级;maven编译插件切换环境变量
  • 【Qt】控件概述 (1)—— Widget属性
  • (笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践
  • OpenCV视频I/O(11)视频采集类VideoCapture之设置视频捕获设备的属性函数 set()的使用
  • 数据结构之树(3)
  • 螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下docker学习02(yum源切换及docker安装配置)
  • 强化学习笔记之【Q-learning算法和DQN算法】