标签:
2 10 30 0
1 4 27
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#define N 1000
using namespace std;
int n;
int c1[N],c2[N];
int a[N];
int main()
{
int num=0;
for(int i=1;i<=300;i++)
{
for(int j=1;j<=50;j++)
{
if(j*j==i)
a[num++]=i;
}
}
// for(int i=0;i<num;i++)
// cout<<a[i]<<" ";
while(~scanf("%d",&n))
{
if(n==0) break;
memset(c1,0,sizeof c1);
memset(c2,0,sizeof c2);
c1[0]=1;
for(int i=0;i<num;i++)
{
for(int j=0;j<=n;j++)
{
for(int k=0;k+j<=n;k+=a[i])
c2[j+k]+=c1[j];
}
for(int j=0;j<=n;j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
cout<<c1[n]<<endl;
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/wust_zjx/article/details/44263565