一 题目描述:
有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?
为了方便讲解和理解,下面讲述个例子:
现在我们是一名小偷,我们的背包容量为8,在我们面前有如下物品:
物品编号:1 2 3 4
物品重量:2 3 4 5
物品价值:3 4 5 8
我想知道在物品总重不超过背包容量的情况下,我们能取得的最大总价值是多少???
寻找递推式:
为方便下述讨论,先定义f(i,j)为在前i个(包括i)物品中所剩背包容量为j的情况下我们能取得的最大价值
面对某一个商品而言,我们肯定的是有两种情况:
1:包的容量不够装该商品了
2:包的容量足以装该商品
对于这两种情况而言,我们可以得到如下递推方程
1:f(i,j)= f(i-1,j) 此时我们不取i商品,所以直接去找前 i-1个其他商品
2:f(i,j)= max(f(i-1,j),f(i-1,j-w[i])+ v[i]) 此时面对i商品,我们可以选择将其收入囊中,也可以选择不要它,此时我们取最好情况即可
f(i-1,j-w[i])+ v[i])表示在i-1个其他商品中剩余容量为j-w[i]的最大价值加上我们刚刚拿下的v[i]
上图来自该博主
例题传送门