下面分析物品三,物品二,物品一的子集,物品三的大小为4,当cap=4的时候就能容纳item3,但此时背包里面的价值为3,明显小于上一行中的cap=4的价值(3<4),所以cap=4时不能将item3放进去,所以第三行的4位置应该和第二行的4位置一致,当cap=5的时候能够容纳item3,且剩余空间为1,和cap=4情况一样,拷贝上一行同一位置的值,当cap=6,放置item3后剩余2,能容item1和item4,二者的总价值:1+3=4<5,故拷贝上一行同位置的值,cap=7的时候,能容item2+item3,总价值大小为7,大于>5,故cap=8的时的值为7,cap=9的时候仍能容难item3+item2,value=7,cap=8的时候,能容纳item1+item2+item3,且总价值大小为8,大于上一行同位置的值,故cap>=9时候,总价值大小为8,第三行:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 0 | 0 | 1 | 4 | 4 | 5 | 5 | 7 | 7 | 8 | 8 | 8 | 8 |
按照这样的逻辑可以得到下面两列,最后二围数组是
0,0,1,1,1,1,1,1,1,1,1,1,1
0,0,1,4,4,5,5,5,5,5,5,5,5
0,0,1,4,4,5,5,7,7,8,8,8,8
0,0,1,4,4,6,6,7,10,10,11,11,13
0,0,1,4,4,6,8,8,10,12,12,14,14
得到这样的数组之后,我们需要作的是根据这个二围数组来产生最优物品子集,方法为
从第len行开始,比较最后一行cap索引位置的值是否大于上一行同一位置的值,如先比较第五行位置12的值(14)与第四行位置12的值(13),因为14!=13,所以item5放置到最优集合中,item5的大小为6,故比较第四行cap-6=6的位置上的值与上一行同一位置上值得大小,因为6!= 5,所以item4能放置到最优集合,下一步要比较的位置cap = 6-item4.Size=6-5=1,第三行位置1与第二行位置1相同,故item3不能放置到最优集合,第二行和第一行第一个位置上的值也一样,所以item2也不能放置进去,最后判断item1是否应该在最优集合,item5+item4后,剩余空间为1,不能容纳item1,故最优集合为{item4,item5};










