您的位置:首页 > 其它

[BZOJ1037]ZJOI2008生日聚会|DP

2015-04-17 10:12 316 查看
显然dp。。f[i][j][x][y]表示i个男孩,j个女孩,以i+j为序列结尾男孩最多比女孩多x,女孩最多比男孩多y时的方案数,用每一个状态更新后面的状态,转移很好YY,无非就是加一个男的或者加一个女的嘛。。

#include<iostream>
#include<cstdio>
#include<memory.h>
#define p 12345678
using namespace std;
int i,j,x,y,n,m,k,ans=0,f[155][155][25][25];
int main()
{
scanf("%d%d%d",&n,&m,&k);
memset(f,0,sizeof(f));
f[0][0][0][0]=1;
for (i=0;i<=n;i++)
for (j=0;j<=m;j++)
for (x=0;x<=k;x++)
for (y=0;y<=k;y++)
{
f[i+1][j][x+1][max(y-1,0)]=(f[i+1][j][x+1][max(y-1,0)]+f[i][j][x][y])%p;
f[i][j+1][max(x-1,0)][y+1]=(f[i][j+1][max(x-1,0)][y+1]+f[i][j][x][y])%p;
}
for (x=0;x<=k;x++)
for (y=0;y<=k;y++)
ans=(ans+f
[m][x][y])%p;
printf("%d",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: