题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1191
题意:将n分成k个数的和每个数x满足1<=x<=m。比如n=7,k=4,m=3,7=1+3+1+2和7=1+2+1+3是不同的。求有多少种分法。
思路:f[n][k][m]=sigama(f[n-i][k-1][m])(1<=i<=m)
#include <iostream>
#include <cstdio>
#define i64 long long
using namespace std;
int C,num=0;
int n,m,K;
i64 f[55][55][55];
void init()
{
int i,j,k,t;
for(k=1;k<=50;k++)
{
for(i=1;i<=k;i++) f[i][1][k]=1;
for(i=2;i<=50;i++) for(j=i;j<=50;j++) for(t=1;t<=k&&t<=j;t++)
f[j][i][k]+=f[j-t][i-1][k];
}
}
int main()
{
init();
for(scanf("%d",&C);C--;)
{
scanf("%d%d%d",&n,&K,&m);
printf("Case %d: %lld\n",++num,f[n][K][m]);
}
return 0;
}