#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
using namespace std;
int main()
{
int a[320],b[320],i,j,k,n;
while(cin>>n&&n)
{
for(i=0; i<=n; i++)//给第一个表达式赋系数 每个表达式里面系数都是1
{
a[i]=1;//最开始系数全为1
b[i]=0;//临时存系数用 角标为指数
}
for(i=2; i<=17; i++)//每个括号内是表达式的话 这个代表表达式个数
{
for(j=0; j<=n; j++)//遍历表达式中各项 第j项
for(k=0; k+j<=n; k+=i*i)//k+j<=n不限制数组会崩了 表示第j个指数
//第i项的指数
b[k+j]+=a[j];//模拟多项式相乘//k+j中的j的指数==第几项
for(j=0; j<=n; j++)
{
a[j]=b[j];
b[j]=0;
}
}
cout<<a[n]<<endl;
}
}
hdu 1398
最新推荐文章于 2021-04-16 20:08:16 发布
