01-Bag - 01背包


问题

现有个珠宝,已知第个珠宝的价值是,重量是。给你一个背包,你可以自由挑选珠宝装到背包中,但背包可以装载的最大重量为。求背包能够装载珠宝的最大价值

解法

为背包中放入前件物品,重量不大于的最大价值,其中。有如下状态转移方程:

初始化,背包中没有放入任何珠宝时

对于第个珠宝,若装入背包,则背包价值增大,背包的剩余重量(还能装载的重量)减小,即(其中);若不装入背包,则一切维持不变,即。选择这两种情形中的最大值;

即为个珠宝中重量不超过的最大价值。该算法的时间复杂度是


源码

ZeroOneBag.h

ZeroOneBag.cpp

测试

ZeroOneBagTest.cpp