完全背包问题的二维数组实现方法
创作时间:
作者:
@小白创作中心
完全背包问题的二维数组实现方法
引用
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];
}
运行结果
热门推荐
存在即是合理,乒乓球的直拍横打与推挡能否“鱼和熊掌”兼得
积极想象:如何与内心的意象对话
含氟固废在水泥生产中的应用:替代原料化利用及其影响
公积金返还比例计算方法
C#如何快速提升代码质量,优化代码
1995年沙市金库劫案:抢金库237万杀害3人,潜逃25年的嫌犯终落网
妙解人居环境"整治题"
如何做好新客户推广管理
温泉设计的私密泡池群与公共泡池区的合理布局
怎么自己单独办户口本
癔症用什么药物治疗
咖啡和可乐能一起喝吗
种植牙后多久可以饮酒?专业医生给出详细解答
秦始皇统一六国和建立中央集权国家的历史影响
Steam特别好评的都市传说+港式恐怖游戏,终于出了手机版
本科毕业论文写作指南:从选题到答辩的全程解析
针灸在癌症相关支持疗法中的应用
中国丧葬文化:人死后下葬前为何要停放3天?头七又指什么?
计算机提示系统繁忙的解决策略
小便有泡沫,就是肾病?别急,我们先分析一下
怎样寻求法律援助劳动争议律师
缓解压力养好生活习惯,远离精神压力带来的健康问题!
狗狗得了细小?别急,这篇指南帮你从容应对!
原神队伍伤害不足?找到各领域专家级的角色或器物,轻松提高队伍输出上限
疖和痈有什么区别?
iOS 权限管理:同时请求相机和麦克风权限的最佳实践
4月行情如何演绎?复盘近十年数据,两大板块历史战绩佳,这一时点上涨概率达8成
DeepSeek概念翻车,游资炒作“闹乌龙”!浙江东方涨停大戏还能演多久?
《我不是药神》以药为引,透视社会民生与人性光辉在困境中的闪耀
毛主席与吴晗:关于朱元璋的对话