力扣算法总结

直接放别人简单易懂的总结,比我自己描述得好

代码随想录 (programmercarl.com)

崔添翼 (Tianyi Cui) 背包问题九讲 2.0 beta1.2 - jggnice! - 博客园 (cnblogs.com)

1.01背包

优化成一维就是利用之前上一维计算出来的数据,在不损害后面还要用的上一维数据的情况下覆盖上一维的数据,做到把二维化简成一维。

为什么一维dp内层循环从后往前:因为转移方程可以看到Fi,v的状态需要从Fi-1,v 或者Fi-1,v-Ci 转化过来,所以,计算i行第v个需要j之前的数据(v-Ci),如果内层从前往后遍历,实际上取的值是此轮循环计算出来的Fi,v-Ci而不是上一轮数据Fi-1,v-Ci ,(当然这个Fi,v-Ci实际推导也是错的),所以内层循环要从后往前算,这样计算Fi,v不需要 后面的数据,所以没用了可以放心覆盖掉。

这一段我没能理解,待解释 

Tips.初始化

2.完全背包

每个物品无限可取,所以计算每个状态要判断每一个物品放几个合适的问题,要搜索一下。从取0个i物品到完全放不下。 但是可以看到复杂度太高,看成n3

Tips:优化剪枝

 

区别:

01的二维,先遍历物品还是先遍历容量都可以

01的一维,必须先遍历物品

完全的一维,先遍历物品还是先遍历容量都可以

为什么?因为首先我们的推导公式告诉我们,01的二维和完全的一维他的推导都是从前往后的,

意味着从左上角推导到右下角,所以只要前面的状态算出来就行。

而01的一维必须从后面开始算,如果你先遍历容量,那这样需要的前置状态会不会被物品i改变?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值