关于01背包逆序遍历容积的思考

本人弱鸡,开始学dp时,对背包问题有许多疑惑,听了讲座却还不是很懂,看了许多博客的讲解也觉得理解的不是很透彻,就背了代码直接过了。现在查阅了一些资料,自己想了想,终于开始明悟,现在把我想到的记录下来,希望能为有相同境遇的萌新提供一些思路。


          我们先来了解01背包的性质,01是指物品在背包中的状态,也就是说,现在有一个容积为 V 的背包,有 n 件物品,每件物品只有一件,他们的体积为 v[i] ,价值为 w[i],  0 就表示 背包里不装这件物品,1反之。因为他们的数量唯一,所以 只需要讨论在或不在,不需要讨论数量。

求背包里物品最大价值的滚动优化过的实现代码如下

for(int i=1;i<=n;i++)

for(int j =v ;j>=v[i];j--)

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

看到这里,我们不禁产生了疑问:为什么体积遍历要逆序进行?

不妨手写一组数据

<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值