动态规划解背包问题

问题

一背包的最大重量b,有n种物品,每种物品的重量和价值分别为 w i w_i wi v i v_i vi,上述数字为正整数,在不超重的情况下,如何放物品能使价值最大。
问题实例:b=10,n=4, w 1 w_1 w1=2和 v 1 v_1 v1=1, w 2 w_2 w2=3和 v 2 v_2 v2=3, w 3 w_3 w3=4和 v 3 v_3 v3=5, w 4 w_4 w4=7和 v 4 v_4 v4=9

动态规划

子问题的界定:考虑前k种物品的分配,重量限制是y,如何使价值最大。原始问题对应的是k=n,y=b
子问题的计算顺序,k遍历由1至n,对确定的k,y遍历由1至b
优化函数的递推方程:
F k ( y ) F_k(y) Fk(y)代表相应的k和y时的最大收益,
F k ( y ) F_k(y) Fk(y)=max{ v k v_k vk+ F k F_k Fk(y- w k w_k wk)
递推方程的初始化:
F 0 F_0 F0(y)=0, F 1 F_1 F1(y)= ⌊ y w 1 ⌋ \left \lfloor \frac{y}{w_{1}} \right \rfloor w1y* v 1 v_{1} v1
F k − 1 F_{k-1} Fk1(y)},当y- w k w_k wk<0时, F k F_k Fk(y- w k w_k wk)=负无穷。
与投资问题类比,递推方程也可写作下列形式:
F x = m a x 0 < = x k < = ⌊ y w k ⌋ F k − 1 ( y − x k ∗ w k ) + x k ∗ v k F_{x}=max_{0<=x_{k}<=\left \lfloor \frac{y}{w_{k}} \right \rfloor}{F_{k-1}(y-x_{k}*w_{k})+x_{k}*v_{k}} Fx=max0<=xk<=wkyFk1(yxkwk)+xkvk
区别在于第一种递推方程的计算量小

代码实现

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值