码迷,mamicode.com
首页 > 编程语言 > 详细

java实现动态规划之背包问题

时间:2019-07-18 23:46:59      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:动态规划   步骤   比较   简单   png   动态   状态   最优   建立   

 

技术图片

求解步骤:

1)建立模型

2)寻找约束条件:只有三个商品,背包重量为10

3)寻找递推关系

V(i):价值

Wi:重量

Vi,j):当前背包容量 j,前 i 个物品最佳组合对应的价值

对于当前商品有两种情况:

①当前商品重量大于背包剩余重量,放不进去。那么Vi-1,j=Vi,j;

②当前商品重量小于背包剩余重量,但是装了也不一定可以达到最优解,再装与不装之间选一个。Max{v(i-1,j),v(i,j-w(i))+v(i)}

其中v(i-1,j):表示不装;v(i,j-w(i))+v(i)表示装了,背包剩余重量减少w(i),但是价值增加了v(i).由此可以得出递推关系:

j(i)>w(i):  v(i,j)=v(i-1,j)

J(i)<w(i):  max{v(i-1,j),v(i-1,j-w(i))+v(i)}

注意:为什么可以放进去的情况下要这样求解,因为动态规划有个最优性原理,v(i-1,j-w(i))就是前面决策造成的一种状态,简单来说就是现在的物品可以放进去,但是我需要做出比较,比较前面已经得出来的最优解会不会因为背包增加了新重量有了变化,从放进去和不放进去两种情况选出最大值。后面的决策就要构成最优策略。两种情况进行比较,得出最优。

 

java实现动态规划之背包问题

标签:动态规划   步骤   比较   简单   png   动态   状态   最优   建立   

原文地址:https://www.cnblogs.com/had1314/p/11210714.html

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