题意:对于一个n,用不超过289的平方数组成,有几种组成方式;
思路:母函数。构造(1+x^i+x^2i+...)...形式的多项式,所求n作为多项式展开中的次数,所求结果为该项的系数;
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int t,n,m; int c1[500010],c2[500010]; int main() { int i,j,k; while(scanf("%d",&n)!=EOF) { if(n==0) break; for(i=0;i<=n;i++){ //初始化每种的个数为1 c1[i]=1;c2[i]=0; } for(i=2;i<=17;i++){ //每个表达式 for(j=0;j<=n;j++){ //每项 for(k=0;k+j<=n;k+=i*i){ //k表示第j个指数 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; }
原文:http://www.cnblogs.com/dominatingdashuzhilin/p/4675159.html