题意:有n种食物,每种食物可以给湫湫带来一个幸福感a,同时也会给她带来b的卡路里的摄入,然后规定她一天摄入的卡路里的量不能超过m,一共有n种食物,问可以得到的
最大的幸福感是多少?
解题报告:一开始以为是01背包,没看题,然后发现题目里面没有说每种食物只能吃一次,才发现是个完全背包,一开始还以为题目的第二组测试数据是错的,无语。。。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 7 int a[105],b[105],ans[100005]; 8 9 int main() 10 { 11 int n,m; 12 while(scanf("%d",&n)!=EOF) 13 { 14 for(int i = 0;i < n;++i) 15 scanf("%d%d",&a[i],&b[i]); 16 scanf("%d",&m); 17 memset(ans,0,sizeof(ans)); 18 for(int i = 0;i < n;++i) 19 for(int k = 1;k <= m / b[i];++k) 20 for(int j = m;j >= k * b[i];--j) 21 ans[j] = max(ans[j],ans[j-k * b[i]] + k * a[i]); 22 int Mtot = ans[0]; 23 for(int i = 0;i <= m;++i) 24 Mtot = max(ans[i],Mtot); 25 printf("%d ",Mtot); 26 } 27 return 0; 28 }