0/1 背包问题
Posted fengxiaozi-liu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0/1 背包问题相关的知识,希望对你有一定的参考价值。
假设小偷要去带着一个容量为8的背包去偷物品,总共有四件商品,请他能偷的最大价值是多少?
物品的价值如下:
这里我们用b(i,j)来表示拿取的物品,i表示可以拿取前几件,不是要往背包里面装几件,j表示背包的容量是多少
在背包容量不能放下第i件物品的情况下:
它所对应的最大价值就是就是对前i-1件的最优考虑因此第i件物品的最大价值可以理解为b(i,j) = b(i-1, j)
在背包容量能放下第i件物品的情况下:
我们需要考虑往背包内放入这件物品的价值大,还是不放这件物品的价值大
当我们不放这件物品的时候其价值为:
b(i,j) = b(i-1,j) 我们不放这件物品就相当于只考虑前i-1件物品
当我们放这件物品的时候价值为
b(i,j) = b(i-1,j-w[i]) +p(i) 当我们放入这个物品后,包中的容量变成b-w[i],我们要考虑的物品也就变成了前i-1件,我们要求的最大价值就变成了b(i-1,j-w[i]) + 当前物品的价值p(i)
综上所述:
背包中的最大价值算法为:
1.不能放下当前第i件物品
b(i,j) = b(i-1,j)
2.能放下当前物品
max(b(i-1,j), b(i-1,j-w[i])+p(i),能放入的时候考虑放与不放的价值哪个大
以上是关于0/1 背包问题的主要内容,如果未能解决你的问题,请参考以下文章