假如我们用C表示最大价值,那么C[n,W]就表示n个物品,在背包容量为W时,背包的最大价值。
在求这个最大价值之前,我们可能会考虑某一子问题的最大价值,用C[i,w]表示,意思是该子问题中,有i个物品,背包的最大容量为w时的最大价值。
现在,结合具体问题来说明。
物品编号 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
重量 | 3 | 4 | 7 | 8 | 9 |
价值 | 4 | 5 | 10 | 11 | 13 |
举个例子说明。现在背包容量为4,所以要求的问题就是c[5,4],现在我假如要考虑物品4是不是进背包,发现w4>4,属于第二种情况,所以我们求解的问题转化成c[5-1,4](c[4,4])的问题,这里可以看出来,i和wi是不一样的。我们书上一样是因为,每次都按5,4,3,2,1的顺序考虑。接着我们考虑物品5,那么w5>w,所以问题由刚才的c[4,4]变成了c[4-1,4]的问题(c[3,4])。同理,当你考虑物品3的时候,也是这样。
更直接地说,因为当背包容量为5时,因为就两个可选的物品,物品1和物品2,所以我们要求解的问题c[5,4]就可以转化成c第三种情况的[2,4]的问题,这时如果我们先考虑1在不在背包里,就是c[2-1,4-3]+4和c[2-1,4]即c[1,1]+4和c[1,4]。然后在分别对两种情况下的子问题,考虑物品2在背包里。对于c[1,1]这个子问题,物品4放不进去,该子问题就转换成c[0,1]这个子问题,这个子问题可以直接算出解为0;对于c[1,4]这个子问题,物品2在不在背包里面就是c[0,0]+5和c[0,4]。
c[5,4]->c[4,4]->c[3,4]->c[2,4]->Max(c[1,1]+4,c[1,4])
按上述顺序求解,如图所示:
现在来解决背包容量为17的问题,从背包容量为0的时候开始考虑。见下面4张表:
表1表示在背包容量为某个值时,可选项和不可选项。
表2表示按物品单位价值比由高到低的顺序考虑问题的最优解。
表3表示按物品重量由大到小的顺序考虑。
表4表示按物品单位价值比由低到高的顺序考虑。
在上述问题中,我们可以发现,当背包容量为0时,问题属于情况1;容量为1-8时,问题最初属于情况2;容量为9-17时,问题最初属于情况3。而且,通过三个表格的对比,我们发现问题的最优解和我们按何种顺序考虑是没有关系的,最终求得的最优解和最大价值都是一样的。
原文地址:http://blog.csdn.net/u010924834/article/details/45743147