hdu 1398 Square Coins

哈,第二道母函数的题目,哎,不过那是因为函数比较明显

G(x)=(1+x+x^2+x^3……+x^300)*(1+x^4+x^8+……)*……(1+x^289)
直接模拟咯
#include<iostream>
#include<algorithm>
#include<string>
#define maxn 310
using namespace std;
int p[18]={0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289};
int num[maxn+1],num1[maxn+1];
void init()
{
	memset(num,0,sizeof(num));
	for(int i=0;i<=maxn;i++)
		num[i]=num1[i]=1;
	for(int i=2;i<=17;i++)
	{
		for(int j=1;j*p[i]<=maxn;j++)
			for(int k=0;k<=maxn;k++)
			{		
				int t=k+j*p[i];
				if(t>maxn)break;
				num1[t]+=num[k];
			}
		for(int j=0;j<=maxn;j++)
			num[j]=num1[j];
	}
}
int main()
{
	int n;
	init();
	while(scanf("%d",&n)==1 && n)
	{
		printf("%d\n",num[n]);
	}
	return 0;
}


 

posted @ 2011-11-02 19:39  枕边梦  阅读(167)  评论(0编辑  收藏  举报