硬想了大半天还是不会。一开始想找规律看看有没有什么递推式,无果。。。
后面在网上看代码,了解到有关母函数的问题。
大神帅气闪闪的讲解入口http://blog.csdn.net/vsooda/article/details/7975485(母函数详细讲解)
在这里列个本题解法和母函数的模板。
#include<string.h>
#include<stdio.h>
int main()
{
int i,j,k,n,c1[125],c2[125];
while(scanf("%d",&n)!=EOF)
{
memset(c2,0,sizeof(c2));
for(i=0; i<=n; i++)
c1[i]=1;
for(i=2; i<=n; i++)
{
for(j=0; j<=n; j++)
{
for(k=0; j+k<=n; k+=i)
{
c2[j+k]+=c1[j];
}
}
for(j=0; j<=n; j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
printf("%d\n",c1[n]);
}
return 0;
}