传送门

这道题很明显是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 生日聚会相关推荐

  1. bzoj 1037: [ZJOI2008]生日聚会Party

    1037: [ZJOI2008]生日聚会Party Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算 坐成一排 ...

  2. [ZJOI2008]生日聚会Party

    1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2907  Solved: 1727 [Submi ...

  3. bzoj1037[ZJOI2008]生日聚会Party dp

    [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2832  Solved: 1674 [Submit][Sta ...

  4. P2592 [ZJOI2008]生日聚会(dp)

    P2592 [ZJOI2008]生日聚会(dp) dp,关键是如何表示男女差的状态. 因此设dp(i,j,k,l)dp(i,j,k,l)dp(i,j,k,l)表示用iii个男生,jjj个女生,男生与女 ...

  5. 1037: [ZJOI2008]生日聚会Party

    1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec   Memory Limit: 162 MB Submit: 2102   Solved: 1246 [ Su ...

  6. P2592 [ZJOI2008]生日聚会

    题目描述 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件: 对于任意连续 ...

  7. bzoj1037 [ZJOI2008]生日聚会Party 插数dp

    这个题首先要认清楚任意一个区间差不超过k个怎么理解 看到k一般想的是装压,但如果是状压的思路的话,就需要前k个满足某种条件,于是有可能会猜到前k个满足非全0或1,但这是显然错误的 由于仅仅考虑前k个并 ...

  8. BZOJ 1037 [ZJOI2008]生日聚会Party(单调DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1037 [题目大意] 现在有n个男生,m个女生排成一行,要求不存在一个区间男女之差大于k ...

  9. BZOJ1037洛谷P2592 [ZJOI2008]生日聚会

    四重循环大模拟 我们考虑f[i][j][k][e]表示前i个人,有j个男生,女生个数即为i-j,任意一段中男生最多比女生多k个,女生比男生最多多e个, 那么当前状态可以转移到 1.在j<n的情况 ...

最新文章

  1. 如何把你的Windows PC变成瘦客户机
  2. 设计模式篇——初探装饰器模式
  3. 嫦娥之死天蓬元帅的转世
  4. linux mysql设置编码_linux下修改mysql编码
  5. China Mobile 免流原理
  6. 官宣!.NET官网发布中⽂版
  7. mysql在linux 下安装
  8. r720支持多少频率的内存吗_电脑基础知识:内存条知识大全,看完小学生都了解...
  9. 【高等数学】微分中值定理
  10. pycharm 调试_把xlwings盘顺溜:xlwings连接到Pycharm进行调试,以及xlwings转换器等的使用...
  11. android 通过短信找回密码,我的android手机短信被我加密了,忘记密码了,在不刷机恢复出厂设置的情况下如何解决?急急急!!!!!...
  12. Servlet和Tomcat底层分析
  13. 我的IOS学习历程-第三天
  14. 等价类划分法设计用例(超详细)
  15. C# 连接本地数据库
  16. trans系列是sci几区_怎么确定SCI论文期刊是几区的?
  17. 概率论 马尔可夫 切比雪夫等定理的解释
  18. 信息安全技术--轮转机密码
  19. 看完这篇,轻松解决FastReport合并单元格!
  20. 【资源】DNW驱动,Win7 64位可用

热门文章

  1. 【二分法】计蒜客:二分答案
  2. 【数据结构和算法笔记】AOE网和关键路径
  3. 【数据结构和算法】广度优先BFS遍历图(树的层序遍历的拓展)
  4. ijkplayer-添加播放截图功能
  5. springboot 数据库假面_Spring Boot实战:数据库操作
  6. java jquery提交表单数据_[Java教程]jquery实现ajax提交表单信息
  7. eval函数python原理_python的eval函数作用
  8. MongoDB中常用的几种数据类型
  9. java读取配置文件和获得项目根目录
  10. 【Web前端】搭建网站相关术语