专题训练:点击打开链接 密码:JXFEACM
其实核心记住:
背包是组合问题 填充性质 元素之间没关系
1. 01背包(右->左)
恰好装满(仅初始化[0])否则全为0,有负值(右移) 浮点数(调换w,v),次优(两个dp),K优([i-1][v][1...k] 放/不放都存起来然后归并) ,求w+v最大 (一样)
2. 完全背包 不限量,但依照V还是有限制(左->右)多重背包 都用标记数组方法,coins poj1742。
3. 混合背包 HDU 3535
最多一个(每次比较都是上个阶段放入与当前阶段不放,初始化为上一阶段),最少一个(init设定-1,若当前阶段-1则放入,否则取最优),无所谓(01)
4. 二维费用背包 两个属性,多一层循环。eg: 01背包限制为仅取M个物品,用M外循环,表示N个物品填充使得M个最优。dp[m][j] = dp[m-1][j-v[i]]+w[i];
5. 分组背包 混合背包差不多 hdu 1712 n个组,每个组n个物品,进行选取 至多一个。 hdu 3033 至少一个
. “物品” 可以是规则 poj1170
关键字:
动态转移方程
自底向上
自上而下
备忘录
分解子问题
学习DP,背包问题似乎是永远绕不过去的。背包问题其实是多阶段状态填充。结合昨晚因为输出看错WA了一晚上的 POJ1384 (完全背包)来谈