BZOJ P1037 [ZJOI2008]生日聚會Party【動態規劃】
阿新 • • 發佈:2018-12-11
簡單四維DP:
#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long long #define rep(i,x,y) for(ll i=(x);i<=(y);i++) #define repl(i,x,y) for(ll i=(x);i<(y);i++) #define repd(i,x,y) for(ll i=(x);i>=(y);i--) using namespace std; const ll N=155; const ll M=25; const ll Mod=12345678; ll n,m,t,ans,f[N][N][M][M]; inline ll read() { ll x=0;char ch=getchar();bool f=0; while(ch>'9'||ch<'0'){if(ch=='-')f=1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return f?-x:x; } inline ll add(ll x,ll y) { return x+y>=Mod?x+y-Mod:x+y;} int main() { n=read(),m=read(),t=read(); f[0][0][0][0]=1; rep(i,0,n) rep(j,0,m) rep(a,0,t) rep(b,0,t) { f[i+1][j][a+1][b>0?b-1:0]=add(f[i+1][j][a+1][b>0?b-1:0],f[i][j][a][b]); f[i][j+1][a>0?a-1:0][b+1]=add(f[i][j+1][a>0?a-1:0][b+1],f[i][j][a][b]); } rep(i,0,t) rep(j,0,t) ans=add(ans,f[n][m][i][j]); printf("%lld",ans); return 0; }