用动态规划解决0-1背包问题

  0-1背包问题:给定n种物体和一个背包。物品i的重量是wi,其价值为vi,背包的容量为C,问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大?

  在选择将物品装入的时候,有两种选择,即装与不装。不能将同一件物品装入多次,也不能只装一部分物品。因此,该问题被称为0-1背包问题。

  首先来分析一下,我们要放入一些物品,这些物品的总质量是不能超过背包的容量的,而且还要让他们的质量之和达到最大。怎么才能实现呢?

m(i,j)={max(m(i+1,j),m(i+1,j-wi)+vi)}     j>=wi

当第i件物品的重量不超过背包容量的话,可以不装或者装。m(i+1,j)这个表示的是不装的情况,那么最优解存在于i+1至n。m(i+1,j-wi)+vi这个表示装入这个物品,那么背包的容量就会减少,减少至j-wi,此事最优解存在于剩下i+1中,还要加上第i个的质量。

        =m(i+1,j)                                       0<=j<wi

当第i件物品超过背包容量的时候一定不能放了!那么就在剩下的i+1到n之间找最优解。

下面我们通过一个例题理解一下!

一个背包的容量为10,有5件物品,每件物品的重量分别为2,5,4,2,3。质量为6,3,5,4,6。怎么放能使总质量最大?

用从c【i,j】表示最大总质量,i是放前i件物品,j是背包容量,下面是c【i,j】的图

  0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 6 6 6 6 6 6 6 6 6
2 0 0 6 6 6 6 6 9 9 9 9
3 0 0 6 6 6 6 11 11 11 11 11
4 0 0 6 6 10 10 11 11 15 15 15
5 0 0 6 6 10 12 12 16 16 17 17

当背包容量为1时,不能放入物品,五种情况下总质量都为零。只能放一件物品的时候,经过分析可以知道,最大总质量不管怎么样都是6。剩下的自己试着写出来吧!

 

posted @ 2021-05-06 16:31  爱吃香菜呢  阅读(514)  评论(0)    收藏  举报