问题描述
大盗潜入博物馆,面前有5件宝物,分别有重量和价值,大盜的背包仅能负重20公
斤,请问如何选择宝物,总价值最高?
物品 | 重量 | 价值 |
---|---|---|
1 | 2 | 3 |
2 | 3 | 4 |
3 | 4 | 8 |
4 | 5 | 8 |
5 | 9 | 10 |
动态规划解法
明确问题以后,我们需要建立动态规划表格
m[(i, w)]:
其中 iii 是装物品的数量 ( 0≤i≤50\le i\le 50≤i≤5 )
,www 是物品的载重 ( 0≤w≤200\le w\le 200≤w≤20 )
mmm 则是这些物品的总价值, 也即是我们需要存入的值。
如何填写动态规划表格呢?
1.i=0(即没有拿宝物)和w=0(最大载重为20)这两种情况下,总价值都为0
2.用循环对每次拿宝物数量和最大载重值进行查找填表
- 当本次i下物品的重量>当前最大载重时,m的值就等于第i-1次总重为w的价值。
- 否则返回 装或者不装该次物品这两种情况下的最大值
算法公式如下:\color {red} {算法公式如下:}算法公式如下:
m(i,W)={ 0 if i=00 if W=0m(i−1,W) if wi>Wmax{ m(i−1,W),vi+m(i−1,W−wi)} otherwise m(i, W)=\left\{\begin{array}{ll} 0 & \text { if } i=0 \\ 0 & \text { if } W=0 \\ m(i-1, W) & \text { if } w_{i}>W \\ \max \left\{m(i-1, W), v_{i}+m\left(i-1, W-w_{i}\right)\right\} & \text { otherwise } \end{array}\right.m(i,W)=⎩