动态规划基础
线性dp:
- LIS:
严格上升:*lower_bound(f+1,f+1+n,a[i]) = a[i];
非严格上升:*upper_bound(f+1,f+1+n,a[i]) = a[i];
- LCS: 最长公共子序列
背包dp:
-
01背包:每种物品只能取一件
-
完全背包:每种物品可以取无数件
-
多重背包:每种物品有固定件数。
可进行二进制拆分优化。
- 分组背包:对不同组做背包就可以了。
区间dp:
-
枚举区间长度
-
枚举区间起点
-
枚举区间断点
树形dp:
- 中的 i 用来表示结点, j 用来表示状态信息。
状压dp:
数位dp:
记忆化搜索
类似dp。先写出dp方程然后在搜索中利用记忆化数组记录最优解。(剪枝?)