坐标型动态规划
是最简单的动态规划类型,通常给定一个序列或网格,记为 A。需要找到序列中某个/些子序列或网格中的某条路径
- 某种性质最大/最小
- 计数
- 存在性
动态规划方程 f[i]
中的下标 i
表示以A[i]
为结尾的满足条件的子序列性质,f[i][j]
中的下标i, j
表示以A[i][j]
为结尾的满足条件的路径的性质。这些性质可能是:
- 最大值/最小值
- 个数
- 是否存在
坐标型动态规划的初始条件f[0]
就是指以A[0]
为结尾的子序列的性质,对于网格,初始条件f[0][0]
就是以A[0][0]
为结尾的子序列的性质。
序列型动态规划
给定一个序列,动态规划方程 f[i]
中的下标 i
表示前 i
个元素 A[0], A[1], …, A[i - 1]的某种性质,初始化时f[0]
表示空序列的性质。
151 · 买卖股票的最佳时机 III - LintCode
最长序列型动态规划
给定一个序列,要求找出符合条件的最长子序列
方法:
- 记录以每个元素 i 结尾的最长子序列的长度
- 计算时,在 i 之前枚举子序列的上一个元素
划分型动态规划
博弈型动态规划
背包问题
区间型动态规划
给定一个序列/字符串,进行一些操作,最后一步将序列/字符串去头去尾, 剩下的会是一个区间[i, j]
,状态自然定义为 f[i][j]
,表示面对子序列[i, ..., j]
时的最优性质。