bzoj 1037: [ZJOI2008]生日聚會Party
阿新 • • 發佈:2018-12-29
DP真強 什麼都能做
/************************************************************** Problem: 1037 User: lxy8584099 Language: C++ Result: Accepted Time:200 ms Memory:59476 kb ****************************************************************/ /* f[i][j][x][y] i個男生 j個女生 所有後綴中 男-女最大為x 女減男最大為y Dp還真是啥都能做 遇到資料小的儘量往DP上面去想 */ #include<cstdio> using namespace std; const int N=155; const int MOD=12345678; int n,m,k; int f[N][N][25][25]; inline int max(int a,int b) { return a>b?a:b; } void Solve() { scanf("%d%d%d",&n,&m,&k); f[0][0][0][0]=1; for(int i=0;i<=n;i++) for(int j=0;j<=m;j++)for(int x=0;x<=k;x++) for(int y=0;y<=k;y++) if(f[i][j][x][y]) { if(i+1<=n) (f[i+1][j][x+1][max(y-1,0)]+=f[i][j][x][y])%=MOD; if(j+1<=m) (f[i][j+1][max(x-1,0)][y+1]+=f[i][j][x][y])%=MOD; // x+1 y+1超過了k也不所謂 因為我們只統計不大於k的部分 } int ans=0; for(int x=0;x<=k;x++) for(int y=0;y<=k;y++) (ans+=f[n][m][x][y])%=MOD; printf("%d\n",ans); } int main() { Solve(); return 0; }