解题思路:把“完全背包问题”转化成“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 人评分
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:411 |
分糖果 (C++代码)浏览:1438 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:459 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:449 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:619 |
WU-陶陶摘苹果2 (C++代码)浏览:968 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:326 |
C语言训练-数字母 (C语言代码)浏览:600 |
文科生的悲哀 (C语言代码)浏览:1398 |
勾股数 (C语言代码)浏览:799 |