- 线性DP;
- 区间DP;
- 背包DP;
- 树形DP;
- 状态压缩DP;
- 数位DP;
- 计数型DP;
- 递推型DP;
- 概率型DP;
- 博弈型DP;
- 记忆化搜索;
1. 线性DP
最经典单串:
- 300. 最长上升子序列 (LIS)
最经典双串:
- 1143. 最长公共子序列 (LCS)
经典问题:
- 120. 三角形最小路径和
- 53. 最大子序和
- 152. 乘积最大子数组
- 887. 鸡蛋掉落 (DP+二分)
- 354. 俄罗斯套娃信封问题 (隐晦的LIS)
打家劫舍系列: (打家劫舍3 是树形DP)
股票系列:
- 121. 买卖股票的最佳时机
- 122. 买卖股票的最佳时机 II
- 123. 买卖股票的最佳时机 III
- 188. 买卖股票的最佳时机 IV
- 309. 最佳买卖股票时机含冷冻期
- 714. 买卖股票的最佳时机含手续费
字符串匹配系列
2. 区间DP
3. 背包DP
- 416. 分割等和子集 (01背包-要求恰好取到背包容量)
- 494. 目标和 (01背包-求方案数)
- 322. 零钱兑换 (完全背包)
- 518. 零钱兑换 II (完全背包-求方案数)
- 474. 一和零 (二维费用背包)
4. 树形DP
- 124. 二叉树中的最大路径和
- 1245. 树的直径 (邻接表上的树形DP)
- 543. 二叉树的直径
- 333. 最大 BST 子树
- 337. 打家劫舍 III
5. 状态压缩DP
6. 数位DP
7. 计数型DP
计数型DP都可以以组合数学的方法写出组合数,然后dp求组合数
- 62. 不同路径
- 63. 不同路径 II
- 96. 不同的二叉搜索树 (卡特兰数)
- 1259. 不相交的握手 (卢卡斯定理求大组合数模质数)
8. 递推型DP
所有线性递推关系都可以用矩阵快速幂做,可以O(logN),最典型是斐波那契数列
9. 概率型DP
求概率,求数学期望
10. 博弈型DP
策梅洛定理,SG定理,minimax
翻转游戏
Nim游戏
石子游戏
井字游戏
11. 记忆化搜索
本质是 dfs + 记忆化,用在状态的转移方向不确定的情况