DP Types
2 min readDec 19, 2020
Common DP problem types
Another summary based on problems from leetcode
- 线性DP;
- 区间DP;
- 背包DP;
- 树形DP;
- 状态压缩DP;
- 数位DP;
- 计数型DP;
- 递推型DP;
- 概率型DP;
- 博弈型DP;
- 记忆化搜索;
1. 线性DP
最经典单串:
300. 最长上升子序列 (LIS)
最经典双串:
1143. 最长公共子序列 (LCS)
经典问题:
887. 鸡蛋掉落 (DP+二分)
354. 俄罗斯套娃信封问题 (隐晦的LIS)
打家劫舍系列: (打家劫舍3 是树形DP)
股票系列:
字符串匹配系列
2. 区间DP
3. 背包DP
416. 分割等和子集 (01背包-要求恰好取到背包容量)
494. 目标和 (01背包-求方案数)
322. 零钱兑换 (完全背包)
518. 零钱兑换 II (完全背包-求方案数)
474. 一和零 (二维费用背包)
4. 树形DP
1245. 树的直径 (邻接表上的树形DP)
5. 状态压缩DP
6. 数位DP
7. 计数型DP
计数型DP都可以以组合数学的方法写出组合数,然后dp求组合数
96. 不同的二叉搜索树 (卡特兰数)
1259. 不相交的握手 (卢卡斯定理求大组合数模质数)
8. 递推型DP
所有线性递推关系都可以用矩阵快速幂做,可以O(logN),最典型是斐波那契数列
9. 概率型DP
求概率,求数学期望
10. 博弈型DP
策梅洛定理,SG定理,minimax
翻转游戏
Nim游戏
石子游戏
井字游戏
11. 记忆化搜索
本质是 dfs + 记忆化,用在状态的转移方向不确定的情况
Reference
[1] https://www.bilibili.com/video/BV1xb411e7ww?from=search&seid=17694755492523252054