ZJOI2008 生日聚会
传送门
这道题很明显是DP。不过一开始我错误的以为是区间DP……但是并不是这样。因为区间DP它需要满足区间的情况是确定的,而这道题并不是确定的情况,所以不是区间DP。
重新考虑,设dp[i][j][p][q]表示当前选取了i个男孩,j个女孩,在所有的区间中男孩最多比女孩多p个,女孩最多比男孩多q个。那么dp[i][j+1][max(p-1,0)][q] += dp[i][j][p][q],dp[i+1][j][p][max(q-1,0)] += dp[i][j][p][q]; 之后分别取模即可。
初始状态dp[0][0][0][0] = 1,结果为dp[m][n][i][j],其中i,j取遍0~k的每一个数,这些状况的和。
看一下代码。
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #define rep(i,a,n) for(int i = a;i <= n;i++) #define per(i,n,a) for(int i = n;i >= a;i--) #define enter putchar('\n')using namespace std; const int M = 160; typedef long long ll;ll read() {ll ans = 0,op = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') op = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){ans *= 10;ans += ch - '0';ch = getchar();}return ans * op; }ll n,m,k,dp[M][M][25][25],ans,mod = 12345678;int main() {n = read(),m = read(),k = read();dp[0][0][0][0] = 1;rep(i,0,n)rep(j,0,m)rep(p,0,k)rep(q,0,k){if(!dp[i][j][p][q]) continue;dp[i][j+1][max(p-1,0)][q+1] += dp[i][j][p][q];dp[i+1][j][p+1][max(q-1,0)] += dp[i][j][p][q];dp[i][j+1][max(p-1,0)][q+1] %= mod;dp[i+1][j][p+1][max(q-1,0)] %= mod;}rep(i,0,k)rep(j,0,k) ans += dp[n][m][i][j],ans %= mod;printf("%lld\n",ans);return 0; }
转载于:https://www.cnblogs.com/captain1/p/9545174.html
ZJOI2008 生日聚会相关推荐
- bzoj 1037: [ZJOI2008]生日聚会Party
1037: [ZJOI2008]生日聚会Party Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算 坐成一排 ...
- [ZJOI2008]生日聚会Party
1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2907 Solved: 1727 [Submi ...
- bzoj1037[ZJOI2008]生日聚会Party dp
[ZJOI2008]生日聚会Party Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2832 Solved: 1674 [Submit][Sta ...
- P2592 [ZJOI2008]生日聚会(dp)
P2592 [ZJOI2008]生日聚会(dp) dp,关键是如何表示男女差的状态. 因此设dp(i,j,k,l)dp(i,j,k,l)dp(i,j,k,l)表示用iii个男生,jjj个女生,男生与女 ...
- 1037: [ZJOI2008]生日聚会Party
1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2102 Solved: 1246 [ Su ...
- P2592 [ZJOI2008]生日聚会
题目描述 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件: 对于任意连续 ...
- bzoj1037 [ZJOI2008]生日聚会Party 插数dp
这个题首先要认清楚任意一个区间差不超过k个怎么理解 看到k一般想的是装压,但如果是状压的思路的话,就需要前k个满足某种条件,于是有可能会猜到前k个满足非全0或1,但这是显然错误的 由于仅仅考虑前k个并 ...
- BZOJ 1037 [ZJOI2008]生日聚会Party(单调DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1037 [题目大意] 现在有n个男生,m个女生排成一行,要求不存在一个区间男女之差大于k ...
- BZOJ1037洛谷P2592 [ZJOI2008]生日聚会
四重循环大模拟 我们考虑f[i][j][k][e]表示前i个人,有j个男生,女生个数即为i-j,任意一段中男生最多比女生多k个,女生比男生最多多e个, 那么当前状态可以转移到 1.在j<n的情况 ...
最新文章
- 如何把你的Windows PC变成瘦客户机
- 设计模式篇——初探装饰器模式
- 嫦娥之死天蓬元帅的转世
- linux mysql设置编码_linux下修改mysql编码
- China Mobile 免流原理
- 官宣!.NET官网发布中⽂版
- mysql在linux 下安装
- r720支持多少频率的内存吗_电脑基础知识:内存条知识大全,看完小学生都了解...
- 【高等数学】微分中值定理
- pycharm 调试_把xlwings盘顺溜:xlwings连接到Pycharm进行调试,以及xlwings转换器等的使用...
- android 通过短信找回密码,我的android手机短信被我加密了,忘记密码了,在不刷机恢复出厂设置的情况下如何解决?急急急!!!!!...
- Servlet和Tomcat底层分析
- 我的IOS学习历程-第三天
- 等价类划分法设计用例(超详细)
- C# 连接本地数据库
- trans系列是sci几区_怎么确定SCI论文期刊是几区的?
- 概率论 马尔可夫 切比雪夫等定理的解释
- 信息安全技术--轮转机密码
- 看完这篇,轻松解决FastReport合并单元格!
- 【资源】DNW驱动,Win7 64位可用