zoj1666

来源:互联网 发布:中国武术 外国 知乎 编辑:程序博客网 时间:2024/05/22 11:51
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int coin[]={1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289};int a[301];int ans[301];int main(){    int i,j,n;    memset(ans,0,sizeof(ans));    ans[0]=1;    for(i=0;i<17;i++)      for(j=coin[i];j<=300;j++)        ans[j]+=ans[j-coin[i]];    while(scanf("%d",&n))    {        if(n==0)break;        printf("%d\n",ans[n]);    }}