动态规划——01背包问题(一维数组、二维数组、初始化)

一、问题描述

有n 个物品,它们有各自的重量和价值,现有给定容量的背包,
如何让背包里装入的物品具有最大的价值总和?

二、动态规划原理

动态规划是将大问题分解成许多小问题,通过寻找大问题与小问
题之间的递推关系,解决一个一个小问题,最终达到解决原问题
的目的。通过填表将每个子问题的解记录下来,在新问题里需要
用到时可以直接提取,节约时间。

例题

四个物体,背包容量为8.

i 1 2 3 4
w(体积) 2 3 4 5
v(价值) 3 4 5 6

解题过程:
1、创建一个新的变量a,a的值可以为1或0;
2、建立关系模型,max(v1a+v2a+v3a+v4a),a的值可以为1或0;
3、v1w1a+v2w2a+v3w3a+v4w4a<=背包容量,a的值可以为1或0;
4、本题有两个变量i(物品的个数),j(背包的容量);(i,j都是变化的)
5、那么定义V(i,j)为当前背包容量j,前i个物品最佳组合对应的价值
6、寻找递推关系,一件商品存在两种可能性:
第一,当前包的容量比该商品体积小,那么此时无法取到,即V(i,j)=V(i-1,j);
第二,当前包的容量比该商品大,但是取还是不取,当然是选择价值大的啦。
V(i,j)=max(V(i-1,j),V(i-1,j-w(i))+V(i));
7、创建二维列表依次遍历每一个物品就好了。

i/j 0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 3 3 3 3 3 3 3
2 0 0 3 4 4 7 7 7 7
3 0 0 3 4 5 7 8 9 9
4 0 0 3 4 5 7 8 9 10
分析

(1) 如,i=1,j=1,w(1)=2,v(1)=3,有j<w(1),故V(1,1)=V(1-1,1)=0;
(2) 又如i=1,j=2,w(1)=2,v(1)=3,有j=w(1),
故V(1,2)=max{ V(1-1,2),V(1-1,2-w(1))+v(1) }=max{0,0+3}=3;
(3) 如此下去,填到最后一个,i=4,j=8,w(4)=5&#x

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值