http://acm.hdu.edu.cn/showproblem.php?pid=1398
// 1304230 2009-04-24 14:13:00 Accepted 1398 0MS 260K 523 B C++ no way 
#include < iostream >
using   namespace  std;
int  main()
{
    
int squares[17]={1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289};
    
//所有硬币的种类及面值
    int i,j,k;
    
int num[301],temp[301];
    
for(i=0;i<=300;i++)
    
{
        num[i] 
= 1;
        temp[i] 
= 0;
    }

    
for(i=2; i<=17; i++)
    
{    
        
for(j=0;j<=300;j++)
        
{
            
for(k=0 ; k+j<=300; k+=squares[i-1]) 
            
{    
                temp[j
+k] += num[j];    
            }

        }

        
for (j=0;j<=300;j++)
        
{    
            num[j] 
= temp[j];    
            temp[j]
=0;    
        }

    }

    
while(cin>>&& k)
    
{
        cout
<<num[k]<<endl;
    }

    
return 0;
}