[bzoj1037][ZJOI2008]生日聚会Party
2016-08-23 20:44
267 查看
[ZJOI2008]生日聚会Party
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。
这道题有点难做。 首先看一下题目就应该知道是DP方程。 然后想简单点就是最后要求出发f[n+m]%12345678对吧 但是,难道一道放上了bzoj的题还会怎么简单吗? 很明显,不会。所以我们就要想的更深入一点 还是一步一步来, 二维的:ans=(ans+f[n+m][0..k])%12345678 就是求只要组成的队列,任意连续的一段男女生差距都小 于等于k的都加起来。 三维的:ans=(ans+f[n+m][0..n][0..k] )%12345678 这个是求在男生有多少名,时任意连续的一段男女生差距都小于等于k的都加起来。 四维的:ans=(ans+f[n+m][0..n][0..x][0..y])%12345678 x和y就是求男生减女生剩多少名,女生减男生剩多少名,如果是负数就等于0。 好的,有的情况都列出来了。那答案不就出来了吗?
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int mod=12345678; int f[310][160][21][21]; int main() { //freopen("party.in","r",stdin);freopen("party.out","w",stdout); int n,m,k; scanf("%d%d%d",&n,&m,&k); memset(f,0,sizeof(f)); f[0][0][0][0]=1; for(int i=0;i<n+m;i++) { for(int j=0;j<=n;j++) { for(int x=0;x<=k;x++) { for(int y=0;y<=k;y++) { if(f[i][j][x][y]) { if(x+1<=k&&j+1<=n) { f[i+1][j+1][x+1][max(y-1,0)]+=f[i][j][x][y]; f[i+1][j+1][x+1][max(y-1,0)]%=mod; } if(y+1<=k&&i+1-j<=m) { f[i+1][j][max(x-1,0)][y+1]+=f[i][j][x][y]; f[i+1][j][max(x-1,0)][y+1]%=mod; } } } } } } int ans=0; for(int i=0;i<=n;i++) { for(int x=0;x<=k;x++) { for(int y=0;y<=k;y++) { ans+=f[n+m][i][x][y]; ans%=mod; } } } printf("%d\n",ans); return 0; }
相关文章推荐
- HYSBZ/BZOJ 1037 [ZJOI2008] 生日聚会Party - dp
- bzoj1037: [ZJOI2008]生日聚会Party DP
- 【BZOJ1037】【ZJOI2008】生日聚会Party 递推
- bzoj 1037 [ZJOI2008]生日聚会Party(DP)
- BZOJ 1037 [ZJOI2008]生日聚会Party
- BZOJ 1037: [ZJOI2008]生日聚会Party DP
- BZOJ1037: [ZJOI2008]生日聚会Party
- bzoj 1037: [ZJOI2008]生日聚会Party
- BZOJ 1037: [ZJOI2008]生日聚会Party DP
- bzoj1037【ZJOI2008】生日聚会Party
- [ZJOI2008][BZOJ1037] 生日聚会Party|动态规划
- bzoj 1037: [ZJOI2008]生日聚会Party dp
- 【bzoj 1037】: [ZJOI2008]生日聚会Party
- BZOJ 1037: [ZJOI2008]生日聚会Party [序列DP]
- 动态规划 BZOJ1037 [ZJOI2008]生日聚会Party
- BZOJ1037 [ZJOI2008]生日聚会Party
- [BZOJ1037][ZJOI2008][DP]生日聚会Party
- BZOJ1037: [ZJOI2008]生日聚会Party
- bzoj1037 [ZJOI2008]生日聚会Party(dp)
- 【bzoj1037】 ZJOI2008—生日聚会Party