1398

 #include
using namespace std;
int main()
{
 int s[20], f[301];
 int j, i, n;
 for(i = 0; i < 17; i++)
 {
  s[i] = (i+1)*(i+1);
 }
 for(i = 1; i < 301; i++)
 {
  f[i] = 0;
 }
 f[0] = 1;
 for(i = 0; i < 17; i++)
 {
  for(j = s[i]; j < 301; j++)
  {                                 // if(f[j-s[i]] + weight[i] > f[j])   f[j] += f[j-s[i]] + weight[i]
   f[j] += f[j - s[i]];   // 完全背包 母函数
  }                        
 }
 while ( cin >> n, n)
 {
  cout << f[n] << endl;
 }
 return 0;
}

你可能感兴趣的:(DP)