UVa 10943 How do you add?(数学递推)

来源:互联网 发布:黄立行我是你的谁 知乎 编辑:程序博客网 时间:2024/06/10 14:42

相当于求解方程x1+x2+......+xk=N。把这个方程转化为(x1+1)+(x2+1)+......+(xk+1)=N+K,这样每一项都是大于等于1的。那就相当于把N+K个1排成一行,分隔成K个部分,也就是在N+K-1条分隔线中选K-1条,C[N+K-1][K-1]就是答案。


代码:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;#include <algorithm>const int mod=1000000;int C[205][205];int main(){for(int i=0;i<=200;i++){C[i][0]=1;C[i][i]=1;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)){if(!N&&!K) break;int res=C[N+K-1][K-1];printf("%d\n",res);}return 0;}

0 0
原创粉丝点击