0-1背包问题——动态规划

问题描述:
有n种物品和一个重量为W的背包,第i种物品的重量是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包重量,且物品总价值价值最大。假设n=5,W=17。

求解步骤:

1、刻画0-1背包最优解结构;

如果有n个物品,用Xi表示第i个物品的状态。Xi 的值为0或1。0表示物品未进入背包,1表示物品进入背包。

如果一个最优解中包含n,即Xn=1,那么其余X1,X2,…,X(n-1)一定构成子问题1,2,…,(n-1)在容量W-wi的最优解。如果Xn=0,则构成在W时的最优解。

2、递归定义最优解的值;

c[ i,w ]表示背包容量为w时i个物品导致的最优解的总价值。得到下式:

第一种情况:i=0和w=0分别表示放入的物品个数为0,背包容量为0,此时谈不上物品的总价值。

第二种情况:wi>w表示第i个物品的重量大于背包的重量,此时i放不进去,构成在i-1上的最优解的问题。

第三种情况:表示物品i可以放入,此时求总价值最大有两种情况:i在包中,总价值为c[i-1,w-wi]+vi;i不在包中,同第二种情况,转换为在i-1上的最优解问题,即c[i-1,w]。

3、计算背包最优解的值。、 由上述公式,考虑一个问题的最优解必须依赖前一个子问题的最优解,所以我们从背包容量为0开始考虑,逐渐增大背包容量,体现一个动态的过程,而考虑在可选物品是否应该放入背包中时,我们先拿一个物品是否在不在,然后在此基础上考虑另一个物品在不在,在比较在或不在求最大价值体现规划的过程。

表示背包容量动态变化过程中,物品是否可以放入,1表示放入,*表示不能放入。

表示 物品按单位价值比顺序考虑问题最优解。

使用场景:

最优子结构:如果一个问题的最优解中包含子问题的最优解,就说该问题具有最优子结构。当然一个问题具有最优子结构时贪心也可能适用。

重叠子问题:对每个子问题仅计算一次,把解保存在一个在需要时可以查看的表中。

对比分治法:

待解问题也分解成若干子问题,但子问题都不独立,用一个表来记录所有已解决子问题的答案,不管子问题是否被用到,只要计算过,就将其结果填入表中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值