母函数
http://acm.hdu.edu.cn/showproblem.php?pid=1398
题意:
硬币值是所有数的平方,1,4,9.......289.这些数,请输入一些数,输出他们所有的组合
输入:
输入多组数,以零结束
输出:
输出这些数的组合总数
输入样例:
2
10
30
0
输出样例:
1 4 27
分析:
我们可以用母函数解决此题(当然也可用动态规划)写出母函数,在编写代码
代码:
#include <iostream>
using namespace std;
#define N 305
int a[N],b[N];
int main(int argc, char *argv[])
{
int n,i,j,k;
while(cin>>n,n)
{
for(i=0;i<=n;i++)
{a[i]=1;b[i]=0;}
for(i=2;i<=17;i++)
{
for(j=0;j<=n;j++)
for(k=0;k+j<=n;k+=i*i)
b[j+k]+=a[j];
for(k=0;k<=n;k++)
{
a[k]=b[k];
b[k]=0;
}
}
cout<<a[n]<<endl;
}
return 0;
}