完全背包问题的二维数组实现方法
创作时间:
作者:
@小白创作中心
完全背包问题的二维数组实现方法
引用
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];
}
运行结果
热门推荐
老花眼怎么办?症状识别、治疗方法与科学护眼指南
春秋战国十大名将排行榜,第一名竟然是他?
竣工时间怎么确定?
德宏州哪个县市最富?德宏州各县市经济实力排名
高度近视的危害与防控
研发支出科目属于什么类科目
深度报道|把握银发经济新机遇让“银发列车”开向春天
自行车长途骑行准备:装备清单与体能提升建议
食道下段有堵塞感?可能是这些原因
市场调研员的必备技能
如何把握股票市场的发展趋势?这种趋势有哪些潜在影响?
鼻窦炎要挂什么科看病
几岁开始教孩子识字好?把握识字黄金期,三个方面助力孩子识字
泡芙制作工艺详解
PMP项目管理考试复习全攻略
什么是合理的期望薪资范围?
龙的足迹:从史前到现代,中国龙文化的千年之旅
揭秘DeepSeek MLPerf基准测试:性能评估的终极指南
医生提醒:镁是保护心脏、防痴呆的必需元素,常吃5类食物补充!
通气鼻贴扩张鼻腔通常会导致鼻子变大吗
如何科学减肥而不产生饥饿感
雇员出现工伤雇主是否要承担连带责任赔偿
界桥之战:袁绍如何以步兵击败公孙瓒的白马义从
宿舍铁架床承重是多少斤
公司使用员工照片、视频宣传,离职后可以要求肖像权赔偿?
计算机人才市场需求背景及发展趋势分析
可乐生产工艺及质量控制要点探讨
轻松掌握 7 个基本狗狗训练命令
什么是合理的轧制比控制?这种控制方法的优势是什么?
如何选择最适合的国际快递方式寄送个人包裹?