BZOJ3612 [Heoi2014]平衡 遞推 整數劃分

#include<bits/stdc++.h>
#define LL long long
#define clr(x,i) memset(x,i,sizeof(x))
using namespace std;
const int N=10005,KK=12;
int n,K,p,f[N*KK][KK],ans;
void solve()
{
	scanf("%d%d%d",&n,&K,&p);
	f[0][0]=1;
	for(int i=1; i<=n*K; i++){
		for(int j=1; j<=i&&j<=K; j++)
		{
			f[i][j]=(f[i-j][j]+f[i-j][j-1])%p;
			if(i>n)
			  f[i][j]=(f[i][j]-f[i-(n+1)][j-1]+p)%p;
		}
	}
	ans=0;
	for(int i=0;i<=K;i++)
	  for(int j=0;j<=n*K;j++){
	  	ans+=f[j][i]*f[j][K-i]%p;ans%=p;
	  	if(i<K)
	  	  ans+=f[j][i]*f[j][K-i-1],ans%=p;
	  }
}
int main()
{
	int cas;scanf("%d",&cas);
	while(cas--)
	{
		solve();
		printf("%d\n",ans);
	}
	return 0;
}

發佈了39 篇原創文章 · 獲贊 4 · 訪問量 9474
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章