P2592 [ZJOI2008]生日聚会(dp)

dp,关键是如何表示男女差的状态。

因此设dp(i,j,k,l)dp(i,j,k,l)dp(i,j,k,l)表示用iii个男生,jjj个女生,男生与女生之差最大为kkk,女生与男生之差最大为lll。

然后就四重循环枚举dp即可,枚举当前放的男生还是女生。

时间复杂度:O(nmk2)O(nmk^2)O(nmk2)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<list>
#include<queue>
#include<stack>
#include<bitset>
#include<deque>
#include<ctime>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define ri register int
#define il inline
#define fi first
#define se second
#define mp make_pair
#define pairint pair<int,int>
#define mem0(x) memset((x),0,sizeof (x))
#define mem1(x) memset((x),0x3f,sizeof (x))
il char gc()
{static const int BS = 1 << 22;static unsigned char buf[BS], *st, *ed;if (st == ed) ed = buf + fread(st = buf, 1, BS, stdin);return st == ed ? EOF : *st++;
}
#define gc getchar
template<class T>void in(T &x)
{x = 0;bool f = 0;char c = gc();while (c < '0' || c > '9'){if (c == '-') f = 1;c = gc();}while ('0' <= c && c <= '9'){x = (x << 3) + (x << 1) + (c ^ 48);c = gc();}if (f) x = -x;
}
#undef gc
#define pb push_back
#define int ll
#define md 12345678
int n,m,d;
int f[155][155][22][22];
il int max(const int &a,const int &b)
{return a>b?a:b;
}
signed main()
{#ifdef M207freopen("in.in", "r", stdin);
#endifin(n),in(m),in(d);f[0][0][0][0]=1;for(ri i=0;i<=n;++i)for(ri j=0;j<=m;++j)for(ri k=0;k<=d;++k)for(ri h=0;h<=d;++h)if(f[i][j][k][h]){// printf("%lld %lld %lld %lld: %lld\n",i,j,k,h,f[i][j][k][h]);int tmp=f[i][j][k][h];(f[i+1][j][k+1][max(h-1,0)]+=tmp)%=md;(f[i][j+1][max(k-1,0)][h+1]+=tmp)%=md;}int ans=0;for(ri i=0;i<=d;++i)for(ri j=0;j<=d;++j)(ans+=f[n][m][i][j])%=md;printf("%lld",ans);return 0;
}

P2592 [ZJOI2008]生日聚会(dp)相关推荐

  1. P2592 [ZJOI2008]生日聚会

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

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

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

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

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

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

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

  5. [ZJOI2008]生日聚会Party

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

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

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

  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. ZJOI2008 生日聚会

    传送门 这道题很明显是DP.不过一开始我错误的以为是区间DP--但是并不是这样.因为区间DP它需要满足区间的情况是确定的,而这道题并不是确定的情况,所以不是区间DP. 重新考虑,设dp[i][j][p ...

最新文章

  1. 虚拟化技术的概述及使用
  2. 再见python你好go语言_再见Shell,你好Python
  3. ECMAScript6入门教程(二)
  4. Intel Realsense 深度流向彩色流对齐 color_aligned_to_depth和depth_aligned_to_color
  5. Java寻找最大公约数
  6. 【7-10 PAT】树的遍历(给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。)
  7. 【养成好习惯】使用pipreqs导出本项目使用的环境
  8. zabbix邮件报警配合logging模块排错的python脚本
  9. dos 必知八项命令
  10. tensorflow线性回归基础函数
  11. python成绩转换_Python格式化输出%与format能不能互相转换?
  12. 关于android的apk版本升级的一些建议
  13. VRRP原理及配置方法
  14. 看到一些关于前端的书籍或者好的网站推荐
  15. 安卓开发(简单打开前置摄像头并显示)
  16. NodeJs视频教程 NodeJs零基础实战视频教程-来自三人行慕课
  17. 2021最新python爬取12306列车信息自动抢票并自动识别验证码
  18. LQR控制器——简单实现与仿真
  19. 利用Python进行市场购物篮分析——入门篇
  20. 无线家庭生活 教你如何设置无线路由器1

热门文章

  1. 系统辨识专题(二)——多旋翼飞行器建模
  2. 「重启21世纪」回到过去,创业崩塌的2009年
  3. 彩信平台软件模块清单
  4. 表格表头重复并重叠在一起,表格内容错位
  5. MyEclipse运行项目404
  6. C#调用AutoCAD二次开发
  7. 中兴阅读,打造专业的企业移动阅读服务
  8. 微软 Windows 系统检测网络连通性(用于显示感叹号)竟然是通过访问一个特殊网址来实现的
  9. 【WPS表格】给数据透视表分组
  10. 使用dede系统建设中英文双语网站详解