动态规划01背包算法详解

动态规划算法核心思想:

    将大的问题转化为小问题进行解决。

01背包问题:

     01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的重量为W1,W2至Wn,与之相对应的价值为V1V2至Vn。01背包是背包问题中最简单的问题。01背包的约束条件是给定几种物品,每种物品有且只有一个(这个与完全背包不同),并且有价值和重量两个属性。在01背包问题中,因为每种物品只有一个,对于每个物品只需要考虑选与不选两种情况。如果不选择将其放入背包中,则不需要处理。如果选择将其放入背包中,由于不清楚之前放入的物品占据了多大的空间,需要枚举将这个物品放入背包后可能占据背包空间的所有情况。

下面来详细描述背包问题:

题目:有一个背包,容量为4磅,现有如下物品

动态规划01背包算法详解_第1张图片

要求:

1)达到的目标为装入的背包的总价值最大,并且重量不出去背包重量。

2)要求装入物品不能重复。

思路解析:

利用动态规划算法每次便利到的第i个物品,根据w[i]和v[i]来确定是否要将物品放到背包中。给定n个物品,w[i]和v[i]表示第i个物品的中重量和对应的价值。v[i][j]表示在背包容量为j重量时,前i个物品所能放的最大值。

动态规划过程如填表过程:

1)先使v[0][j] v[j][0]为0这样做的目的是更好的对应下标做后续计算。

动态规划01背包算法详解_第2张图片

2)当只有吉他时,背包容量为1或者2、3、4磅时 只能装入吉他

动态规划01背包算法详解_第3张图片

3)当有吉他和音响时分析步骤:

if(音响的容量大于当前背包容量)

      直接使用上一个单元格的重量

     动态规划01背包算法详解_第4张图片

if(音响的容量不大于当前背包容量)

取(上一个单元格的值)与(新增商品价值+剩余重量最大价值)比较,将最大的填入表中。

动态规划01背包算法详解_第5张图片

你可能感兴趣的:(java,web)