完全背包求方案总数。。。一直不对,看了结题报告才恍然大悟,因为费用和背包的大小 都是有限的,知道范围的,所以可以先进行预处理。。。
#include <iostream>
#include<cstdio>#include<cstring>
#include<cmath>
using namespace std;
int main()
{
int f[301];
int c[290];
int n;
for(int a=0;a<=17;a++)
c[a]=a*a;
memset(f,0,sizeof(f));
f[0]=1;
for(int i=1;i<=17;i++)
for(int j=c[i];j<=300;j++)
f[j]=f[j]+f[j-c[i]];
while(scanf("%d",&n)&&n)
cout <<f[n] << endl;
return 0;
}