概述
/**
* @param {m} 物品重量数组
* @param {v} 物品价值数组
* @param {index} 当前待选择的物品索引
* @param {C} 背包容量
*/
function resloveKs(m, v, index, C) {
if (C <= 0 || index < 0) return 0
let ks = resloveKs(m, v, index - 1, C)
if (C >= m[index - 1]) {
ks = Math.max(ks, v[index - 1] + resloveKs(m, v, index - 1, C - m[index - 1]))
}
return ks
}
(function () {
const Alist = [4, 5, 6, 12, 8]
const Blist = [10, 62, 15, 78, 12]
const size = Alist.length
const C = 20
console.log(resloveKs(Alist, Blist, size, C));
})()
递归实现 商品数 0 ~ n 过程中 每一个数量级背包大小的最大价值 (背包数量级 0,1,2,3...)
比较获取最大的价值
每一次增加商品就行判断 放入新商品当前数量级背包价值(放入新商品的价值加上背包剩余的数量级的最大价值,递归获取。)和不放入新商品当前背包数量级的最大价值。
-------- 不知道放入多少个商品, 所以先比较最后一个商品放不放入背包的最大价值
获取放入新商品后 递归获取剩余背包数量级的最大价值
获取不放入新商品 递归获取背包数量级下剩余商品的最大价值 进行比较
通过 index 从最后往前进行倒叙“遍历”商品获取背包的最大价值。
最后
以上就是自由冰淇淋为你收集整理的简单背包问题 获取最大价值~~(个人理解,看不懂看别家的)的全部内容,希望文章能够帮你解决简单背包问题 获取最大价值~~(个人理解,看不懂看别家的)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复