0-1背包
有一个背包,背包的总承载重量是Wkg,现在有n个物品,每个物品的重量不等,并且不可分割。我们期望选择几件物品,装载到背包中。在不超过背包所能装载重量的前提下,如何让背包中物品的总重量最大?
0-1背包问题的回溯实现技巧:
第 13 行的递归调用表示不选择当前物品,直接考虑下一个(第 i+1 个),故 cw 不更新
第 15 行的递归调用表示选择了当前物品,故考虑下一个时,cw 通过入参更新为 cw + items[i]
函数入口处的 if 分支表明递归结束条件,并保证 maxW 跟踪所有选择中的最大值
1 | public class PkgDemo { |
Java代码
0-1背包最大重量问题
1 | package com.ludepeng.datastruct.algorithm.backtrackingAlgorithm.packageZeroOne; |
0-1背包最大价值问题
1 | package com.ludepeng.datastruct.algorithm.backtrackingAlgorithm.packageZeroOne; |