1037: [ZJOI2008]生日聚会Party

Time Limit: 10 Sec   Memory Limit: 162 MB
Submit: 2102   Solved: 1246
[ Submit][ Status][ Discuss]

Description

  今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party。 hidadz带着朋友们来到花园中,打算
坐成一排玩游戏。为了游戏不至于无聊,就座的方案应满足如下条件:对于任意连续的一段,男孩与女孩的数目之
差不超过k。很快,小朋友便找到了一种方案坐了下来开始游戏。hidadz的好朋友Susie发现,这样的就座方案其实
是很多的,所以大家很快就找到了一种,那么到底有多少种呢?热爱数学的hidadz和她的朋友们开始思考这个问题
…… 假设参加party的人中共有n个男孩与m个女孩,你是否能解答Susie和hidadz的疑问呢?由于这个数目可能很
多,他们只想知道这个数目除以12345678的余数。

Input

  仅包含一行共3个整数,分别为男孩数目n,女孩数目m,常数k。

Output

  应包含一行,为题中要求的答案。

Sample Input

1 2 1

Sample Output

1

HINT

n , m ≤ 150,k ≤ 20。

Source

[ Submit][ Status][ Discuss]



因为新增男生或者女生只对后缀的东西产生影响

f[i][j][a][b]:已经排了i个男生,j个女生,后缀男生-女生最大值为i,女生-男生最大值j,方案数

转移方程与统计显然

但是,a和b存在出现负数的情况

不过可以全部定义为0来处理

这样是对的(苟蒻这里被绕进去好久)

首先,,因为另一维的制约,这个实际上是负数的东西不会一直负下去

然后,状态0可以直接转移到状态1,即使它实际上负的很惨

因为我们是处理后缀最大的差值,,这个时候我们就是新造了一段啊,,

#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<bitset>
#include<algorithm>
#include<cstring>
#include<map>
#include<stack>
#include<set>
#include<cmath>
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;const int mo = 12345678;int n,m,k,f[155][155][22][22];int main()
{#ifdef DMCfreopen("DMC.txt","r",stdin);#endiff[0][0][0][0] = 1;cin >> n >> m >> k;for (int i = 0; i <= n; i++)for (int j = 0; j <= m; j++)for (int a = 0; a <= k; a++)for (int b = 0; b <= k; b++) {if (!f[i][j][a][b]) continue;int na = a+1,nb = b-1;if (na <= k) {if (nb < 0) nb = 0;f[i+1][j][na][nb] += f[i][j][a][b];f[i+1][j][na][nb] %= mo;}na = a-1; nb = b+1;if (nb <= k) {if (na < 0) na = 0;f[i][j+1][na][nb] += f[i][j][a][b];f[i][j+1][na][nb] %= mo;}}int Ans = 0;for (int i = 0; i <= k; i++)for (int j = 0; j <= k; j++)Ans += f[n][m][i][j],Ans %= mo;cout << Ans;return 0;
}

1037: [ZJOI2008]生日聚会Party相关推荐

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

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

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

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

  3. [ZJOI2008]生日聚会Party

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

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

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

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

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

  6. P2592 [ZJOI2008]生日聚会

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

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

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

  8. ZJOI2008 生日聚会

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

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

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

最新文章

  1. 查看mysql的编码格式
  2. rand(),srand()产生随机数
  3. Beanstalkd使用
  4. 小技巧—设置IIS禁止网站放下载电影文件
  5. python爬带用户名密码的网页_python爬虫用户名密码登录POST
  6. 经典C语言程序100例之二六
  7. gps84转换gcj02公式_百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换...
  8. 腾讯视频下载安装免费装到手机_腾讯视频怎么上传个人本地视频
  9. 训练日志 2018.9.8
  10. springmvc 全局编码_Java SpringMVC乱码问题排查和解决
  11. 改善你的生活品质,可以从一块小小的单片机开始
  12. 信赖铃音的PS2游戏目录2017.6
  13. 4款Bootstrap在线富文本编辑器
  14. 伴随矩阵例题_考研数学一真题详解:伴随矩阵有关问题
  15. KEGG信号通路富集分析
  16. matplotlib4 --设置line的属性, color,linestyle, linewidth, marker等
  17. 网络服务器的配置与管理
  18. 开源帮助:什么是退出代码 137,你能修复它吗?
  19. word2016文档在正文分栏情况下而时脚注不分栏
  20. 追踪ws的怪蜀黍(DFS)

热门文章

  1. Spring中的事务传播行为
  2. 冒泡和快速排序的时间复杂度_排序算法学习分享(二)交换排序---冒泡排序与快速排序...
  3. 疫情肆虐全球,哪些中国科技公司最受影响?
  4. 从古代名著看领导与被领导的艺术
  5. 驱动级键盘模拟(C#)(高手请飘过)
  6. 白杨SEO:SEO网站代码优化有哪些?如何做才能更符合百度搜索引擎优化?
  7. 实施质量保证与实施质量控制的区别与联系
  8. qq文件传输服务器ip,TP-Link通过获取QQ登陆服务器IP及封锁QQ登陆
  9. Anaconda与Pycharm的辨析
  10. 深入解析当下大热的前后端分离组件django-rest_framework系列一