您的位置:首页 > 其它

UVA 10943 How do you add?

2016-07-26 10:32 387 查看
题意:

给你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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: