您的位置:首页 > 其它

【BZOJ】【1037】【ZJOI2008】生日聚会party

2015-04-14 18:26 295 查看

DP

  orz iwtwiioi

  这种题居然是DP……原来统计方案数是可以用动态规划来做的啊= =用一些变量来维护一些信息,保证方案可行性/合法性

  人太弱实在是有些忧伤……

/**************************************************************
Problem: 1037
User: Tunix
Language: C++
Result: Accepted
Time:460 ms
Memory:42660 kb
****************************************************************/

//BZOJ 1037
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
inline int getint(){
int v=0,sign=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if (ch=='-') sign=-1; ch=getchar();}
while(ch>='0'&&ch<='9'){ v=v*10+ch-'0'; ch=getchar();}
return v*sign;
}
const int N=155,INF=~0u>>2,MOD=12345678;
typedef long long LL;
/******************tamplate*********************/
int n,m,k,f

[21][21],ans;
int main(){
#ifndef ONLINE_JUDGE
freopen("1037.in","r",stdin);
freopen("1037.out","w",stdout);
#endif
n=getint(); m=getint(); k=getint();
f[0][0][0][0]=1;
F(i,0,n) F(j,0,m) F(k1,0,k) F(k2,0,k){
if (k1+1<=k) (f[i+1][j][k1+1][max(k2-1,0)]+=f[i][j][k1][k2])%=MOD;
if (k2+1<=k) (f[i][j+1][max(k1-1,0)][k2+1]+=f[i][j][k1][k2])%=MOD;
}
F(x,0,k) F(y,0,k) (ans+=f
[m][x][y])%=MOD;
printf("%d\n",ans);
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: