完全背包问题的二维数组实现方法
创作时间:
作者:
@小白创作中心
完全背包问题的二维数组实现方法
引用
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];
}
运行结果
热门推荐
登黄鹤楼瞰长江,感受武汉独特魅力
冬日东湖:武汉最美打卡地推荐
探访黄鹤楼:一座楼,两重天,千年文化铸就“天下江山第一楼”
世界预防中风日推荐:多喝白茶护心脑
白茶:抗氧化界的网红新宠!
白茶:天然抗氧化神器!
琶洲塔:广州的历史文化瑰宝
琶洲塔:一座古塔的修复与新生
物业管理的工作经历怎么写?
企业应对市场变化的十大关键能力
长汀古城游玩攻略:漫步汀州古城,品味客家文化的独特韵味与风情
福建连城冠豸山:丹崖绝壁与碧水丹山的完美融合
最快20分钟!高铁当天往返!南京出发适合穷游的6大城市!
青岛到杭州西湖自驾游全攻略:840公里沿途景点、路线详解与住宿推荐
警惕职场PUA:如何识别与应对职场精神操控?
职场沟通新姿势:找到老板的兴趣点
失眠穴位按摩全攻略:10个助眠穴位位置与按摩方法详解
你应该把热乎乎的剩菜直接放进冰箱吗?
酸菜鱼真的健康吗?专家揭秘!
家常酸菜鱼:传统烹饪技艺与现代创新的完美融合
2025春运铁路新规全攻略:实名制购票、安检要求及出行建议
【健康科普】中医教您如何调理,摆脱胃痛困扰
如何理解市场中的定价机制?定价机制对资源配置有何作用?
提升燃油效率的方法有哪些?
油价波动对行业发展的影响及应对策略
毛泽东思想:传统文化的革新者
《2024 AI职场研究报告》:如何在AI时代提升职场竞争力?
深圳AI热潮:新职业涌现,你准备好了吗?
木构架的奇迹:伟大的中国古建筑
如何看懂山西古建筑?