关于滚动数组优化详解

在经过我不断的询问我终于理解了这个二维转化成一维的思想,

首先在01背包中,该层的状态都是由上一层的状态而来的,a[j-v[i]],而j-v[i]是严格小于等于j的

,因此在一双重for循环中,每次j-v[i]都是提前被计算过的了,dp的顺序是由第一层i决定的,它决定了dp是由前面的结果推出后面的结果,因此我们在计算a[j]d的时候,a[j-v[i]]在第i-1层已经计算过了,而在第i层时,由于j-v[i]比j小,因此他在第i层时又被重复计算了一遍,此时的a[j-v[i]]的值就不是第i-1层计算的了,而是重复被计算了的,所以要保证它重复计算在a[i][j]的后面,严格保证用到的是第i-1层的,所以要保证逆序,

第二在完全背包中,该层用到的是该层的状态,因此我们应该要保证它的重复计算要在a[i][j]前面,

所以正序进行,

后面的其他背包问题都可以由这两种演变推广,如果该层只用到第i-1层那么逆序,如果只用到第i层那么正序

希望我的理解能对大家有所帮助,谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值