完全背包问题的二维数组实现方法
创作时间:
作者:
@小白创作中心
完全背包问题的二维数组实现方法
引用
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];
}
运行结果
热门推荐
清华北大AI教学大揭秘:个性化学习新纪元!
牙龈无缘无故总出血,要警惕这几种疾病!
华山医院揭示特定肠道菌群对牙周病的潜在影响
肺癌晚期咳出黑色痰,这些原因需警惕
肝功能异常预防建议
国漫中的光脚女神:从奉眠到紫女,独特的魅力与精神内涵
排列五投注风险管理:你真的会吗?
秋冬养胃首选:鲈鱼的养生价值与烹饪指南
秋冬护胃新选择:鱼肉的营养价值与食用指南
膳食纤维:痔疮克星!这样吃远离“菊花痛”
丁香园专家:科学预防痔疮,从这些细节做起
痔疮患者运动指南:从运动选择到注意事项
大蒜能预防感冒、帮助减肥!了解大蒜8大功效、食用禁忌再推荐你3道大蒜料理
洋葱的功效与作用有哪些
从驾考到职场:樊登教你掌握高效沟通秘籍
驾考心态大揭秘:稳住别慌!
康爱多推荐:正确使用复方塞隆胶囊缓解疼痛
服用复方塞隆胶囊期间的饮食禁忌与注意事项
杜鹃花怎么浇水
杜鹃花的种植:合理的施肥是杜鹃花健康生长和繁花似锦的保障!
排列五热潮下的理性投资指南
认识身边的乡土药用植物——“鸡冠花”
春节走亲戚如何应对领导问话?
春节走亲戚送礼攻略:土蜂蜜的选购与送礼技巧
春节返岗前如何应对“节后综合征”
元旦小长假,这些活动绝对不容错过!
考驾照前一天的车辆操作秘籍
驾考宝典推荐:考前心理调节法
严查严管+创新治理:多措并举预防醉驾事故
高考前必吃香蕉!缓解压力有奇效?