假设有一个问题描述为:
现有4个物品,小偷背包总容量为8,怎么可以偷得价值最高的物品,
物品信息如下:
物品编号:1 2 3 4
物品重量:2 3 4 5
物品价值:3 4 5 8
动态规划状态转移方程:
F(k,W)表示背包容量为W,K件物品可以偷,所能偷到的最大值
Vk表示第k件物品的价值,Wk表示第k件物品所占有的容量。
状态转移方程:
- Wk>W时(第k个物品的重量大于背包重量)
F(k,W)=F(k-1,w) 第k件物品太重放不下,不偷。
2.Wk<=W时(第k个物品的重量小于等于背包重量)
F(k,w)=max{ F(k-1,W), F(k-1,W-Wk)+Vk }
不偷第k件物品 偷第k件物品
由上述分析以及状态转移方程可得下表,问题所求即为f(4,8)=12
下面分析是哪些物品放到了背包里:
从f(4,8)看起,竖着看,f(4,8)上面为f(3,8),由于f(4,8)不等于f(3,8),说明在小偷背包容量不变的情况下,多了一种可以偷取的物品4,这时偷得的价值变化(大)了,因此4号物品一定被偷了。
由于背包总容量为8,4号物品所占容量为5,因此剩下可以偷取的物品的容量为8-5=3。
因此此时看f(3,3)的最大值即可,因为从f(2,3)到f(3,3),f(k,w)的值不变,说明在小偷背包容量不变的情况下,多了一种可以偷取的物品3,这时偷得的价值没有变化,因此3号物品一定没被偷。
这时要再往上看f(1,3)到f(2,3),f(k,w)的值变化,说明在小偷背包容量不变的情况下,多了一种可以偷取的物品2,这时偷得的价值变化(大)了,因此2号物品一定被偷了。
由于背包总容量为8,4号物品四号物品被偷后的背包容量为3,3号物品也被偷走,背包此时容量为0,说明程序执行完成。
通过上述分析,被偷走的物品是4号和2号,总价值是8+4=12.