背包问题的顺序问题

对于01背包问题,动态规划的二维状态转移方程为:

dp[i][j] = max(dp[i - 1][j],dp[i - 1][j - w(i)] + v[i])

物理意义:
前i个物品放入背包重量为j时的最大价值 = max(i不放入 (前i - 1 个物品放入背包,重量为j) 时的价值,i放入(前 i - 1 个物品放入背包,重量为 j - w(i)) 时的价值)
对于二维转移方程,顺序处理即可,但是若想做到空间优化,将二维状态转移方程变为一维状态转移方程

dp[j] = max(dp[j],dp[j - w(i)] + v(i))

上式等式右边均为 i - 1时的状态,等式左边为 i 时的状态,此式表明:

dp[j] 既可以表示 dp[i][j], 又可以表示 dp[i - 1][j].

因此对于处理顺序就需要考虑一下了。

首先来看一下顺序操作会有什么后果:
对于顺序操作,显然 dp[j - w(i)] 会先于dp[j] 得到,而当计算dp[j]时,
dp[j] = max(dp[j],dp[j - w(i)] + v(i)) 中的dp[j - w(i)]此时已经不是 i - 1时的状态值了,而是 i 时的值,也就是发生了覆盖现象,因此,顺序操作是不可取的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值