题目链接:Ignatius and the Princess III
题目大意:
将正整数n,拆分成几个整数,有多少种。
思路:母函数,f(x)=(1+x^1+x^2+x^3+…)(1+x^2+x^4+x^6+…)…(1+x^n),每一种情况相乘,从1到n。
代码:
#include<stdio.h>
#include<string.h>
const int maxn=1e4+9;
int a[maxn],b[maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<=n;i++)//初始化拆分只有1的情况
a[i]=1;
for(int i=2;i<=n;i++)//遍历不同的情况,2-n
{
for(int j=0;j<=n;j++)//两式相乘
{
for(int k=0;k+j<=n;k+=i)
b[k+j]+=a[j];
}
for(int j=0;j<=n;j++)
{
a[j]=b[j];
b[j]=0;
}
}
printf("%d\n",a[n]);
}
return 0;
}