完全背包问题的二维数组实现方法
创作时间:
作者:
@小白创作中心
完全背包问题的二维数组实现方法
引用
CSDN
1.
https://blog.csdn.net/weixin_53824622/article/details/140009493
完全背包问题与0-1背包问题的主要区别在于物品的选取次数:0-1背包问题中每个物品只能选取一次,而完全背包问题中每个物品可以无限次选取。本文将通过一个具体示例,详细介绍如何使用二维数组来解决完全背包问题。
问题描述
设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。
输入格式
- 第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);
- 第2..N+1行:每行两个整数Wi,Ui,表示每个物品的重量和价值。
输出格式
仅一行,一个数,表示最大总价值。
输入样例
10 4
2 1
3 3
4 5
7 9
输出样例
12
代码实现
#include<iostream>
using namespace std;
int w[201],c[31];
int value[201][201];//第一个参数代表的是前n件物品,后一个参数代表的是物品的价值。
int main(){
int m,n;//m,n分别代表背包容量和物品数量。
cin>>m>>n;
for(int i=1;i<=n;i++)
cin>>w[i]>>c[i];//w和c分别代表容量和价值。
for(int i=1;i<=n;i++)//先遍历物品。
{
for(int j=1;j<=m;j++)//再遍历背包。
{
//如果当前背包容量小于物品容量,那么无法放入到背包中,背包的价值依旧是前一个容量的价值。
if(w[i]>j){
value[i][j]=value[i-1][j];
}
//如果当前背包容量大于物品容量,那么这时候可以选择放与不放,看下这两种情况哪种价值大。
if(j>=w[i])
value[i][j]=max(value[i-1][j],value[i][j-w[i]]+c[i]);
}
}
cout<<value[n][m];
}
运行结果
热门推荐
养胃胡椒猪肚汤 散寒暖胃
Excel快速计算工程量的实用指南
老旧/低配电脑畅玩黑神话悟空丨手把手教您升级硬件+游戏优化
电动汽车充电器维护指南:六大实用技巧确保充电安全
电脑Excel制作记账凭证的详细教程
如何查网络历史数据库
学校图书馆的配置设计还需要考虑哪些方面呢
为什么南极没有熊?具体内容总结如下
传奇世界境界提升所需修为详解
零食界的“网红”——辣条是垃圾食品吗?
甲亢患者可以喝豆浆吗?医生的专业解答来了
拔罐后不同颜色说明了什么?拔罐颜色症状对照表
利用泡沫轴加快肌肉恢复 5项练习必做
炙甘草的功效与作用 炙甘草现代应用方法有什么
缺席判决的上诉流程
智齿长出的原因及预防方法
银曜石与黑曜石价格比较:哪个更贵?
戒烟后肥胖还能再瘦吗?
流水线上的小鸡性别鉴定师
药师说药丨高血压患者感冒后的用药注意事项
“航空”和“航天”,这两个词竟然不是一回事!
无人机安装步骤及组装注意事项详解
解决就医“停车难”!成都多家医院将新增临时停车场,优化附近交通组织
孩子磕碰撞伤,冷敷还是热敷?敷错伤更严重!
下肢静脉曲张,超声到底看什么?
戏曲现代戏应向写意表达回归
设计景观台阶的三要素
申请香港高校留位费详解:高额留位费下的申请策略
中文歌曲《今生缘》再次在外国走红,业内人士:或与谐音梗有关
甲状腺功能化验单解读:七项指标含义及正常参考范围