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 && k)
 {
cout<<num[k]<<endl;
}
return 0;
}
|