很简单的计数问题,推出状态转移方程即可。
用d(i,j)表示i拆成j个数和的种类数
d(i,j)=d(i-1,j)+d(i,j-1)
边界:d(i,1)=1
#include <stdio.h>
#include <string.h>
#define mod 1000000
int main()
{
int p[110][110],n,k;
memset(p,0,sizeof(p));
for(int i=0;i<=100;i++)
{
p[i][1]=1;
for(int j=2;j<=100;j++)
{
p[i][j]=(p[i-1][j]%mod+p[i][j-1]%mod)%mod;
}
}
while(scanf("%d%d",&n,&k)==2)
{
if(!n&&!k)break;
printf("%d\n",p[n][k]);
}
return 0;
}