相当于求解方程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; }