完全背包问题的二维数组实现方法
创作时间:
作者:
@小白创作中心
完全背包问题的二维数组实现方法
引用
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];
}
运行结果
热门推荐
旗云更换防冻液的步骤是什么?正确更换防冻液有哪些重要性?
8首最好听的太极音乐
移星换斗局:古代权谋的高级玩法
膏方酒千年文化的交融与创新
《秦风·黄鸟》教你写出感人肺腑的哀悼对联
人大信息化:推动民主决策新时代的引擎
功名社交,漫游归途,古代诗人在人生的十五个“失物招领”处留下了回响
人生名利场,羁绊无休假。47句关于人生感悟的古诗词:专治焦虑
点号“·”的秘密武器,让你的文章秒变高大上
点号“·”的花式用法,你get了吗?
Windows防火墙无法更改某些设置怎么办?多种方式解决
野钓白条鱼用什么饵料好?
《独立》——杜甫孤傲与忧虑的双重奏
跟名家学写作|怎么写旷野
郦道元《三峡》:地理学与文学的双重瑰宝
复旦中山医院开发氨基酸质谱检测方法,助力精准医疗
Nature子刊:少吃蛋白质,尤其这种,高蛋白饮食或促进心血管疾病发生
双皮奶不凝固?六大原因及补救措施,教你做出细腻顺滑甜品
200M宽带够用吗?七步教你评估!
上海某公司遭遇DDoS攻击,我们该如何保护自己?
防冻液更换的操作步骤是怎样的?更换后怎样检查是否正常?
废防冻液如何安全处理?处理废防冻液有哪些环保要求?
红枣排骨汤:一碗暖心的养生美味
冬季滋补首选:排骨汤的营养秘密
维生素B2的神奇功效,你知道吗?
维生素B族餐后服用效果最佳!揭秘B族维生素的科学服用方法
老中医教你泡制跌打损伤特效药酒
双十一大促后,教你写出最走心的生日祝福语
双十一后,这样送生日祝福更时尚!
送祝福,也要有点新花样!