题意:
给你n<=100,k<=100问你k个0~n之内的数相加等于n的方法数。
思路:
首先,建立个数学模型,把这问题转换成n个小球要放到k个桶中的方法数(可以存在桶为空的情况)。那么我们这里可以用插空法去做,因为存在桶为空的情况,那么我们只需在最后多加上k-1个空去选择就好了,答案为C(n+k-1,k-1),打表处理下。
#include<cstdio>
typedef long long LL;
const LL MOD=1e6;
const int MAX=205;
LL C[MAX][MAX];
void init(){
for(int i=0;i<MAX;i++){
for(int j=0;j<=i;j++){
if(j==0||j==i) C[i][j]=1;
else C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;
}
}
}
int main(){
init();
int n,k;
while(~scanf("%d%d",&n,&k)&&(n!=0||k!=0)){
printf("%lld\n",C[n+k-1][k-1]);
}
return 0;
}