C++_背包最大可容价值问题

该博客介绍了一个C++解决背包问题的算法。给定物品的重量、价值和背包容量,算法通过顺序选择物品并调整背包内容,以找到总价值最大的物品组合。在示例中,最大价值为10,由第2件和第1件物品(体积7、3,价值7、3)组成。博客详细阐述了设计思路、伪码、测试用例以及算法的优缺点和潜在改进。

 

问题描述、

问题描述:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大?

问题分析:先将n件物品顺序排列,依次装入背包,每装入一件即检查当时背包物品体积是否超过C,若装入该物品后不超过背包容量C,则装入,否则弃之取下一个,当背包中无法装入新物品时,记录背包中物品总价值为V, 若当前背包中物品总价值V为最大值,则将当前物品组合记录,并取出最后装入的物品,继续装入其他未装入的物品,如此重复直到所有组合尝试过,输出使总价值V最大的物品组合。

输入样例: 物品体积分别为{4,7,3,5,4,2};价值分别为{4,7,3,5,4,1}

输出样例: 最大价值为10,其组合为体积为7价值为7的第2件物品和体积为3价值为3的第1件物品

设计思路

设计思路:设一维数组w[1:n]用来存放n件物品的体积,一维数组vi[1:n]用来存放n件物品价值,一维数组v[1:n]用来存放当前为止放入背包物品价值最大组合的序号,一维数组s[1:n]用来存放放入背包内的物品的序号,C为背包能容纳的体积,V为背包内物品总价值,Vmax为当前为止物品组合最大价值。i为待选物品序号。每进栈一件物品,就从C中减去该物品的体积,若C-W[i]>=0,则该物品可选,若C-W[i]<0,则该物品不可选,此时物品组合总价值与Vmax比较,若大于Vmax,则替换Vmax及v[1:n],若i>n,则需退栈,若此时栈空,则结束运行并输出此时Vmax和v[1:n]。

数据结构:w[1:n]:存放n件物品的体积。

vi[1:n]用来存放n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值