P2592 [ZJOI2008]生日聚会
Posted may-2nd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2592 [ZJOI2008]生日聚会相关的知识,希望对你有一定的参考价值。
容易发现已经结束掉的一个子串只要合法就对后面没有影响,所以可以令 (f_{i,j,p,q}) 表示前 (i+j) 个人有 (i) 个男孩,(j) 个女孩,所有后缀中男孩最多比女孩多 (p) 个,女孩最多比男孩多 (q) 个的方案数,转移即枚举下一个位置是男孩或者女孩。
时间复杂度 (O(nmk^2))~
code:
#include<bits/stdc++.h>
using namespace std;
#define N 25
#define NN 155
#define Mod 12345678
#define Max(x,y)((x)>(y)?x:y)
#define For(i,x,y)for(i=x;i<=(y);i++)
int f[NN][NN][N][N];
int main()
{
int n,m,k,ans=0,i,j,p,q;
cin>>n>>m>>k;
f[0][0][0][0]=1;
For(i,0,n)
For(j,0,m)
For(p,0,k)
For(q,0,k)
{
if(p<k)f[i+1][j][p+1][Max(q-1,0)]=(f[i+1][j][p+1][Max(q-1,0)]+f[i][j][p][q])%Mod;
if(q<k)f[i][j+1][Max(p-1,0)][q+1]=(f[i][j+1][Max(p-1,0)][q+1]+f[i][j][p][q])%Mod;
}
For(p,0,k)
For(q,0,k)ans=(ans+f[n][m][p][q])%Mod;
cout<<ans;
return 0;
}
以上是关于P2592 [ZJOI2008]生日聚会的主要内容,如果未能解决你的问题,请参考以下文章
[BZOJ 1037][ZJOI2008]生日聚会Party