这个题目直接是一个母函数的模板题目。
代码如下:
#include<iostream> #include<cstdio> #include<string.h> #include<cmath> #include<stdlib.h> #include<fstream> using namespace std; #define MAX 301 int n ,cnt[500],dic[500]; int main(){ int i,j,k; while((cin>>n)&&n>0) { for( i = 0 ; i<=MAX;i++) { cnt[i]=1; } //1表示的数据可以是无限大 memset(dic,0,sizeof(dic)); //从第二个开始往前加 for(i=2;i<=17 ; i++) { for(j = 0 ; j <=n ; j++)//遍历上一个式子的全部项 { for(k = 0 ; k+j<=n ; k+=i*i)//遍历当前式子的全部xiang { dic[j+k]+=cnt[j];//当前这个的系数,完全取决于上一个的系数,就是是上一个式子的系数 } } for(j =0 ; j<= n ;j++) { cnt[j]=dic[j];//将临时存储的系数转移过来 dic[j]=0; } } printf("%d\n",cnt[n]); } }