背包九讲笔记-01背包问题

基本思想

与动规类似,把大问题分解,把因为求第i个物品放入背包的获利会受到第i-1个物品的影响,因此,需要考虑其影响,即考虑第i-1个物品获利。然后在剩余空间允许的情况下,再考虑将第i个物品放入后的获利并与前比较,这样,就获得了状态转移方程:

F[i,v] = max{F[i − 1,v],F[i − 1,v − Ci] + Wi}

这样的常规思路需要一个DP二维数组来记录(以体积为标准),记录第i个物品获得的最大值,知道所有物品放完,最后便可以产生最大价值。

空间复杂度的优化

以上方法的好处是以空间换时间,但是空间复杂度是可以优化的,因为每次第i个物品会与第i-1个有关系,这种可以只考虑上一个的情况,用一维数组便可以解决,因此用一个F[v],便可以代替F[i- 1,v]F[i-1,v-Ci],不过,需要注意的是,在递推的时候,需要V的递减顺序(如果是递增,计算过程中会出现一维数组出现前半段是f[v],后半段是f[v-1]的情况,而计算后边的时候需要调用前面的,会让计算f[v]调用前半段的f[v]而非f[v-1]导致错误。)

F[v] ← max{F[v],F[v − Ci] + Wi} 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值