完全背包问题的二维数组实现方法
创作时间:
作者:
@小白创作中心
完全背包问题的二维数组实现方法
引用
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];
}
运行结果
热门推荐
膜片弹簧离合器的构造和工作原理
过去与现在,玩家修的仙有何不同
知识蒸馏综述:知识的类型
胃肠道间质瘤怎么检查
研究揭示:咬合平衡与修复体对种植体修复后患者咬合功能的影响
我国地震多发区大揭秘,这些地方一定要警惕!
甲流来袭,肾病患者如何应对?奥司他韦需要调整剂量吗?
显卡风扇转速管理:用户自定义设置的10个最佳实践
机械密封基础:工作原理及选择时应考虑的因素
我国的退休金一个月大概多少钱?工龄42年企业退休金的计算标准是什么?
探索Win10最稳定兼容性最佳版本(选择最优Win10版本的关键)
基于STM32的气体监测系统设计与实现
五脏好不好,看看舌头就知道
究竟是为了省油还是跑得快? 48V轻混系统解析
牡蛎片可以天天吃吗?专家解析其功效与风险
钢板桩拔桩指南:方法、注意事项及解决方案
如何利用开源项目提升机器视觉技能
工程质量有问题找哪个投诉?责任如何认定?
三角函数中的和差与倍角公式的推导与计算
查尔斯·巴贝奇:计算机科学之父与管理学先驱
弘扬诚信文化,引领文明风尚
宠物蛇的生活环境:从栖息箱到温度控制一一介绍
如何正确储存和处理纱线以保持质量
Redis集群和分片的几种常见方式
微波毫米波天线与器件:技术解析与未来展望
旧物重塑创意升级 古都青年探索可持续生活新路径
专家解读:陪诊服务如何收费?服务标准又是哪些?看这里就够了!
易派紫微斗数:从入门到精通
惊蛰名称的由来及其历史演变
重金属超标怎么办?预防、治理与修复全攻略