题意:求将n分为k个数相加的种数。
如:n=20,k=2,则可分为:
0+20=20
1+19=20
2+18=20
.......
20 +0=20
共21种方案。
解析:令f(n,m)表示将n分为m个数相加的种数,则 f(n,m)= ∑ f(n-i,m-1) (0 ≤ i ≤n)
代码如下:
1 # include2 # include 3 # include 4 # include 5 # include 6 using namespace std; 7 const int mod=1000000; 8 int a[105][105];///a[i][j]表示把i分为j个数的方法个数; 9 int main()10 {11 int i,j,l,n,k;12 memset(a,0,sizeof(a));13 for(i=0;i<=100;++i)14 a[i][1]=a[0][i]=1;15 for(i=1;i<=100;++i){16 for(k=2;k<=100;++k){17 for(l=0;l<=i;++l){18 a[i][k]+=a[i-l][k-1];19 a[i][k]%=mod;20 }21 }22 }23 while(scanf("%d%d",&n,&k),n+k)24 {25 printf("%d\n",a[n][k]);26 }27 return 0;28 }
这道题和 如出一辙
或是