背包学习笔记

c——cost(费用)  w——weight(价值)

01背包的第二层循环可以简化  从V到c[i],因为费用为c[i]的物品不会影响dp[1]—dp[c[i]-1]的状态

所有的背包若只求最大值,不用必须装满时,初始化为0
若必须装满背包,初始化为负无穷

多重背包某个物品的总费用大于背包容量时可以按完全背包来算
不大于容量时,可以按一维背包算,每个物品乘系数,系数初始为1,每次*2,直到大于背包容量(大于背包容量这次不计算);最后再算一次总数减系数个的情况

二维费用背包
可能第二维的费用为隐藏条件,比如最多取x件。每取一件,付出的费用为1。
f[i][v][u],分别表示前i件,第一维费用,第二维费用,可以像01背包那样把前i件优化掉
二维费用背包的状态转移方程是f[i][v][u]=max(f[i-1][v][u],f[i-1][v-a[i]][u-b[i]]+w[i])
优化完也还是三层for循环

分组背包(每组取一个)
三重for循环,第一层组数,第二层背包容量(从v——0),第三层每组的物品
因为里面两层for循环的作用是找该组容量为v时的最大价值,每次更新,因为v不变,每组都从上一组更新过来,所以每组最多取一个。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值