动态规划之0/1背包问题——教你如何填表格

题目:
在这里插入图片描述
在填表之前,你要知道0/1背包问题的递推式,才能完成下面的任务。在动态规划求解问题中,都有一个递推式,这个递推式面对不同的问题是不同的。
0/1背包问题递推式
wi代表第i个物品的重量(weight),vi代表第i个物品的价值(value),绘制表格时,横轴为背包容量 j ,纵轴为“前 i 个物品”放入背包,中间这些矩阵就填背包中物品的价值的和。

下面开始正式填表格啦!
首先,面对只有0个物品,或者背包容量为0的时候,是不可能放入任何东西的,所以这里(0,j)和(i,0)均填0。

0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0
w1=2 v1=6 1 0
w2=2 v2=3 2 0
w3=6 v3=5 3 0
w4=5 v4=4 4 0
w5=4 v5=6 5 0

接着,从这里开始,我们要从上到下,再从左到右的填表了。
面对(1,1),物品1重量为2,放不下,填0,纵观一整列,没有重量为1的物品,所以面对背包为1的这一列,都填0.

0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0
w1=2 v1=6 1 0 0
w2=2 v2=3 2 0 0
w3=6 v3=5 3 0 0
w4=5 v4=4 4 0 0
w5=4 v5=6 5 0 0

面对(1,2),套用递推式,2 >= w1, 使用第2个式子,
V ( 1 - 1 , 2 ) = 0
V(1-1,2-2)+ v1 = 6
选这两个更大的一个,故此处填6。翻译过来就是:物品1重量为2,可以放进背包容量为2的背包,其价值为6。以下我们省略翻译部分,直接套公式。

0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0
w1=2 v1=6 1 0 0 6
w2=2 v2=3 2 0 0
w3=6 v3=5 3 0 0
w4=5 v4=4 4 0 0
w5=4 v5=6 5 0 0

接着是(2,2),套用递推式,2 > = w2, 使用第2个式子,
V ( 2 - 1 , 2 ) = 6
V(1 - 1 , 2 - 2 )+ v2 = 3
选这两个更大的一个,故此处填6。

对于(3 ,2),因为 2 < w3 , 所以使用第1个式子
V(3-1,2)= 6
故此处填6。

剩下的物品4和物品5重量都大于背包容量,同(3,2)。

0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0
w1=2 v1=6 1 0 0 6
w2=2 v2=3 2 0 0 6
w3=6 v3=5 3 0 0 6
w4=5 v4=4 4 0 0 6
w5=4 v5=6 5 0 0 6

不知道通过上面的示例你发现没有,使用第一个式子,就是直接复制正上方的数字,使用第二个式子则需要根据具体情况计算,把正上方的数字和具体物品计算的结果进行比较,由此一来,就方便多了。

下面我先填了简单的数据,再举1个例子就结束填表教程。

0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0
w1=2 v1=6 1 0 0 6 6 6 6 6
w2=2 v2=3 2 0 0 6 6 9 9 9
w3=6 v3=5 3 0 0 6 6 9 9 9
w4=5 v4=4 4 0 0 6 6 9 9 9
w5=4 v5=6 5 0 0 6 6 9 9

面对(5,6),由于 6 > = w4 ,故使用第2个式子,把正上方的数字 9 和 【正上方减去wi个单位的数字,再加上当前要放入的物品重量比较】,即:
V(i-1 , j-4)+ 6 = 12

故此处填12.

0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0
w1=2 v1=6 1 0 0 6 6 6 6 6
w2=2 v2=3 2 0 0 6 6 9 9 9
w3=6 v3=5 3 0 0 6 6 9 9 9
w4=5 v4=4 4 0 0 6 6 9 9 9
w5=4 v5=6 5 0 0 6 6 9 9 12

如法炮制,同学们自己动手填一填吧,然后再对照答案。

动态规划之0/1背包问题——教你如何填表格_第1张图片

接下来我们就要通过回溯来判断出我们都把什么物品放进了背包,请听下回分解!

你可能感兴趣的:(算法)