[BZOJ 3612][Heoi2014]平衡
阿新 • • 發佈:2018-10-09
計數dp ide .com image spa pri blank ons pan
傳送門
計數dp的第一題
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define rep(i,a,b) for(int i=a;i<=b;++i) 4 const int maxn=100100; 5 int f[maxn][15],n,K,P,T; 6 inline int gi() { 7 int x=0; char o; bool f=true; for(;!isdigit(o=getchar());)if(o==‘-‘)f=true; 8 for(;isdigit(o);o=getchar()) x=(x<<1View Code)+(x<<3)+(o&15); return f?x:~x+1; 9 } 10 int main() { 11 T=gi(); 12 while(T--) { 13 n=gi(); K=gi(); P=gi(); int w=n*(K-1); 14 if(K==1) {puts("1"); continue;} 15 memset(f,0,sizeof(f)); f[0][0]=1; 16 rep(i,1,w) rep(k,1,K) { 17 if(i>=k) f[i][k]=(f[i-k][k]+f[i-k][k-1])%P; 18 if(i>=n+1) f[i][k]=(f[i][k]-f[i-n-1][k-1]+P)%P; 19 } 20 int ans=0; 21 rep(i,1,w) rep(k,1,K-1) 22 ans=(ans+1LL*f[i][k]*f[i][K-k]%P)%P; 23 rep(i,1,w) rep(k,1,K-2) 24 ans=(ans+1LL*f[i][k]*f[i][K-k-1]%P)%P; 25 printf("%d\n",ans); 26 } 27 return 0; 28 }
[BZOJ 3612][Heoi2014]平衡