解题思路:把“完全背包问题”转化成“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语言代码)浏览:651 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1040 |
WU-判定字符位置 (C++代码)浏览:1406 |
The 3n + 1 problem (C语言代码)浏览:553 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:1169 |
Tom数 (C语言代码)浏览:725 |
2^k进制数 (C语言描述,蓝桥杯)浏览:1420 |
Hello, world! (C语言代码)浏览:824 |
分糖果 (C语言代码)浏览:920 |
判定字符位置 (C语言代码)浏览:799 |