java实现动态规划之背包问题
Posted had1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现动态规划之背包问题相关的知识,希望对你有一定的参考价值。
求解步骤:
1)建立模型
2)寻找约束条件:只有三个商品,背包重量为10
3)寻找递推关系
V(i):价值
W(i):重量
V(i,j):当前背包容量 j,前 i 个物品最佳组合对应的价值
对于当前商品有两种情况:
①当前商品重量大于背包剩余重量,放不进去。那么V(i-1,j)=V(i,j);
②当前商品重量小于背包剩余重量,但是装了也不一定可以达到最优解,再装与不装之间选一个。Maxv(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): maxv(i-1,j),v(i-1,j-w(i))+v(i)
注意:为什么可以放进去的情况下要这样求解,因为动态规划有个最优性原理,v(i-1,j-w(i))就是前面决策造成的一种状态,简单来说就是现在的物品可以放进去,但是我需要做出比较,比较前面已经得出来的最优解会不会因为背包增加了新重量有了变化,从放进去和不放进去两种情况选出最大值。后面的决策就要构成最优策略。两种情况进行比较,得出最优。
以上是关于java实现动态规划之背包问题的主要内容,如果未能解决你的问题,请参考以下文章