算法特征
状态机 DP 和 DP 的区别在于:
- 状态机 DP 单个状态下有多个情况,普通 DP 只有单个情况 -> 所以定义,也从一个子问题变成多个子问题
- 每个状态顺序是一个连续的过程(类似 A->B->C),子问题是相互依赖、交替计算的关系
算例:978. 最长湍流子数组
拆解一下,解题思路的关键步骤。
子数组类DP问题的定义:以最后一个元素结尾的最大xxx
一、子数组类DP问题的定义:子数组是连续的,子数组类的子问题定义必须加一个限制 — 以最后一个元素结尾的。
- 如最大子数组和:子问题 f(k) 表示 nums[0…k) 中,以最后一个元素结尾的最大子数组和。
特征1:定义多个子问题
978. 最长湍流子数组,一个子问题,有上升和下降、水平三种状态,三种状态组合有五种情况。
f(k) 从哪里来?
为了简化,我们可以定义多个子问题。
定义多个子问题思路就是这样,像状态机DP题是一定要定义多个子问题的。
特征2:状态是一个连续的过程
题目限制条件:最多完成俩笔交易。
这意味着,股票买卖的过程,经历了不同的阶段,这就是状态机模式。
俩笔一进一出,有五种阶段:
定义每个阶段状态,以及每个阶段状态从哪里来?