解题思路:把“完全背包问题”转化成“01背包问题”来做。看似有无限多的物品,但背包只有那么大。
注意事项:和上一题稍有不同,输出记得加“max=”。
参考代码:由“01背包问题”的代码更改而来,第9行是增加的,其他一样。
#include<iostream> int main(){ using namespace std; int m,n; cin>>m>>n; int w,c,s[m+1]={0}; while(n>0){ n--; cin>>w>>c; for(int i=m/w;i>0;i--) for(int j=m+1;j>=w;j--) s[j]=max(s[j],c+s[j-w]); } cout<<"max="<<s[m]; return 0; }
0.0分
3 人评分
WU-C语言程序设计教程(第三版)课后习题11.11 (C++代码)(想学链表的可以看看)浏览:1346 |
字符串输入输出函数 (C语言代码)浏览:2480 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:534 |
C二级辅导-同因查找 (C语言代码)浏览:563 |
时间转换 (C语言代码)浏览:624 |
企业奖金发放 (C语言代码)浏览:2315 |
【计算球体积】 (C语言代码)浏览:1548 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:518 |
三角形 (C语言代码)浏览:653 |
C语言程序设计教程(第三版)课后习题6.9 (C++代码)浏览:499 |