动态规划 力扣专题
入门DP
爬楼梯
-
额外难点:必刷题!DP计算排列而非组合的设计思路
打家劫舍
-
额外难点:环形DP处理
-
额外难点:必刷题!对称值域的处理
-
额外难点:同
3186,必刷题!对称值域的处理
最大子数组和(最大子段和)
-
额外难点:最大子数组和的必刷题!通过数学优化后,抽象为DP
-
额外难点:最大子数组和的必刷题!对于限制长度的最大子数组和的处理
-
额外难点:最大子数组和的必刷题!对于不限制长度的最大子数组和的处理
-
额外难点:最大子数组和的必刷题!求绝对值转换为求最大子数组和
背包(选还是不选)
01背包(只能选一次)
-
额外难点:01背包的精髓题,只刷这一题就够了
-
额外难点:位运算、贪心
-
额外难点:贪心、后效性判定
-
额外难点:前后缀的设计
-
额外难点:差值DP、滚动数组
-
额外难点:计数DP、滚动数组
-
额外难点:01背包的精髓题
-
额外难点:01背包、多重背包、二分的综合题
-
额外难点:01背包、双指针的综合题
-
额外难点:01背包、数学优化、乘法原理
-
额外难点:栈、队列与01背包的综合题
完全背包(选无数次)
-
额外难点:精髓题,必刷!
多重背包(可以选多次)
-
额外难点:多重背包的精髓题,前缀和、滑动窗口优化
-
额外难点:逆事件的乘法原理优化
-
额外难点:乘法原理、前缀和、滑动窗口优化
分组背包(每个组选一个或者不选)
-
额外难点:前缀和
-
额外难点:贪心
经典线性DP
最长公共子序列 LCS
基础
-
额外难点:最优性剪枝
-
额外难点:最优性剪枝
进阶
-
额外难点:前后缀分解
-
额外难点:LCS的必刷题!初始值、状态设计
-
额外难点:LCS的必刷题!初始值、状态设计
-
额外难点:LCS的必刷题,必刷题!是SCS的模板题
-
额外难点:初始值、状态设计
最长递增子序列LIS
基础
-
额外难点:最长单调不减序列的编程,是“单调不减”,不是普通的“单调递增”
-
额外难点:转换为最长单调不减序列的问题建模
-
额外难点:同样还是转换为最长单调不减序列问题
-
额外难点:前后缀分解
进阶
-
额外难点:线段树
-
额外难点:LIS的必刷题!二分、前缀和、贪心
-
额外难点:整除的链式传递性质,必刷!
-
额外难点:排序优化单调性
-
额外难点:状态设计
-
额外难点:LIS的必刷题!LIS删除与改变元素的区别、构造、贪心
-
额外难点:特殊条件下,LCS转换为LIS
-
额外难点:LIS的必刷题!多维排序时找规律
划分DP(将数组拆分为相邻或相间的连续子数组)
划分可行性
-
额外难点:字典树
没有个数限制
-
额外难点:回文串
-
额外难点:回文串
-
额外难点:数学、滚动数组
-
额外难点:滚动数组
-
额外难点:滚动数组
-
额外难点:贪心、manacher、回文串
-
额外难点:单调队列、前缀和
-
额外难点:LCP
-
额外难点:中心扩展、回文串、贪心、哈希表
-
额外难点:贪心
-
额外难点:后缀和、数学
有个数限制
-
额外难点:二分、异或前缀
-
额外难点:贪心、二分
-
额外难点:回文串
-
额外难点:回文串
-
额外难点:单调栈
-
额外难点:中位数、数学、前缀和
-
额外难点:区间重叠
-
额外难点:逻辑上的划分,初始值设定
-
额外难点:数学、区间长度限制下的剪枝
-
额外难点:双指针、区间长度限制下的剪枝
状态机DP
买卖股票
-
额外难点:滚动数组
-
额外难点:滚动数组
-
额外难点:状态设计、初始值
基础
-
额外难点:初始值、状态设计、数学
-
额外难点:初始值、状态设计、数学
-
额外难点:状态设计
-
额外难点:初始值、状态设计
-
额外难点:贪心
-
额外难点:状态压缩
进阶
-
额外难点:状态设计
-
额外难点:双指针、状态设计
-
额外难点:创新的状态设计!
-
额外难点:创新的状态设计!
-
额外难点:前后缀分解
-
额外难点:前后缀分解、状态设计
-
额外难点:问题建模、状态设计、贪心
-
额外难点:高难度的滚动数组,要好好学;状态设计、贪心
其他线性DP
一维DP
-
额外难点:必刷题!整除的链式传递性质
-
额外难点:结尾选择
-
额外难点:必刷题!逆序考虑状态转移方程!
-
额外难点:必刷必刷题!向前覆盖问题的逆序、正序设计,以及双指针单调性优化
-
额外难点:必刷题!同余分组+排列组合+打家劫舍!
-
额外难点:栈的括号匹配问题用DP解
-
额外难点:问题抽象的建模转换
-
额外难点:必刷题!从一个字符串转换为另一个字符串的新思路!
-
额外难点:前后缀分解+状态机DP的好题
-
额外难点:用贪心进行初始化打表
不相交区间
子数组DP
-
额外难点:无穷循环DP的处理
-
额外难点:子数组之间的状态转移
-
额外难点:子数组之间的状态转移、乘法取模
-
额外难点:子数组之间的状态转移、乘法取模
-
额外难点:发掘前后缀分解的规律
-
额外难点:发掘前后缀分解的规律
合法子序列 DP(f[x]以元素值x结尾的合法子序列,而非下标;如果x不是整数,或者值域范围很大,可以用哈希表代替数组)
-
额外难点:必刷题!回文子序列的经典题!
-
额外难点:必刷题!按值DP的易错点!
-
额外难点:状态机DP的视角处理子序列
-
额外难点:必刷题!必刷题!按值DP的经典题!
-
额外难点:状态的设计
-
额外难点:必刷题!必刷题!序列去重的经典题!
-
额外难点:计算状态的贡献
子矩形 DP
区间DP
最长回文子序列
-
额外难点:必刷题!回文子序列的经典题!
-
额外难点:转换为回文子序列
区间 DP
-
额外难点:必刷题!三种方法求回文串
-
额外难点:必刷题!区间DP模板题
-
额外难点:必刷题!消消乐上下文无关的模板题
-
额外难点:必刷题!消消乐上下文有关的模板题
-
额外难点:两个字符串时的区间DP
-
额外难点:自行构造区间DP的状态设计
-
额外难点:自行构造区间DP的状态设计
-
额外难点:自行构造区间DP的状态设计
计数DP
-
额外难点:试填法