UVa 10943 - How do you add?(组合数)

来源:互联网 发布:c语言位运算优先级 编辑:程序博客网 时间:2024/05/16 05:37

求一个数n拆成k个数的方法个数。
利用隔板法求得

ans=(n+k1k1)

利用c[i][j]=(c[i1][j]+c[i1][j1])%mod递推预处理组合数,然后读入nk输出答案即可。

#include<cstdio>const int maxn=210;const int mod=1000000;int c[maxn][maxn];int main(){    for(int i=0;i<maxn;++i) c[i][0]=1;    for(int i=1;i<maxn;++i)        for(int j=1;j<=i;++j)            c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;    int n,k;    while(~scanf("%d%d",&n,&k)&&(n||k))        printf("%d\n",c[n+k-1][k-1]);    return 0;}
0 0