状态机DP


算法特征

状态机 DP 和 DP 的区别在于:

  • 状态机 DP 单个状态下有多个情况,普通 DP 只有单个情况 -> 所以定义,也从一个子问题变成多个子问题
  • 每个状态顺序是一个连续的过程(类似 A->B->C),子问题是相互依赖、交替计算的关系

算例:978. 最长湍流子数组

题解:https://leetcode.cn/problems/longest-turbulent-subarray/solution/yi-zhang-dong-tu-xiang-jie-dong-tai-gui-wrwvn/

拆解一下,解题思路的关键步骤。
 


子数组类DP问题的定义:以最后一个元素结尾的最大xxx

一、子数组类DP问题的定义:子数组是连续的,子数组类的子问题定义必须加一个限制 — 以最后一个元素结尾的

  • 如最大子数组和:子问题 f(k) 表示 nums[0…k) 中,以最后一个元素结尾的最大子数组和。


 


特征1:定义多个子问题

978. 最长湍流子数组,一个子问题,有上升和下降、水平三种状态,三种状态组合有五种情况。

f(k) 从哪里来?

为了简化,我们可以定义多个子问题。


定义多个子问题思路就是这样,像状态机DP题是一定要定义多个子问题的。
 


特征2:状态是一个连续的过程

算例:123. 买卖股票的最佳时机 III

题目限制条件:最多完成俩笔交易。

这意味着,股票买卖的过程,经历了不同的阶段,这就是状态机模式。

俩笔一进一出,有五种阶段:

定义每个阶段状态,以及每个阶段状态从哪里来?

猜你喜欢

转载自blog.csdn.net/qq_41739364/article/details/129693217