码迷,mamicode.com
首页 > 其他好文 > 详细

0/1 背包问题

时间:2020-11-04 18:38:48      阅读:13      评论:0      收藏:0      [点我收藏+]

标签:image   算法   多少   png   ima   一个   nbsp   max   alt   

假设小偷要去带着一个容量为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 背包问题

标签:image   算法   多少   png   ima   一个   nbsp   max   alt   

原文地址:https://www.cnblogs.com/fengxiaozi-liu/p/13923288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!