闫氏DP分析法

“所有的 $DP$ 问题,本质上都是有限集中的最值问题”——闫学灿

原作指路

核心思想

集合的方式来考虑 $DP$ 的状态。

阶段

$DP$ 的阶段:状态和状态转移。

所以有:状态表示状态计算

状态表示

把几个具有相同点的元素合在一起考虑,成为一个状态

对于一个状态 $F_i$ ,考虑两个角度:

1.集合: $f(i)$ 表示什么集合

由于 $F_i$ 表示的是一堆东西(这也是 $DP$ 优于枚举的核心),我们要考虑这一堆东西的共同特征,如:所有满足某个条件的元素集合。这一点请仔细考虑,到底是大于等于,大于,小于,小于等于,等于……这些的不同会导致状态计算方式的不同

2.属性: $f(i)$ 的属性

存的数与集合的关系:如 $max,min,count,sum$ 等。

很明显, $F_i$ 大多数时候是一个数,代表这个集合的某一个属性,多是最大值、最小值、数量、总和等。题目问什么,属性一般就是什么。

状态计算

对于 $F_i$ 所表示的集合,我们将其划分为多个子集。

  • 划分的依据——找最后一个不同点(依题而定,即关键决策)

  • 划分之后,根据其子集求 $F_i$ 的值。

  • 举例:当属性为 $max$ 时, $F_i=max($ 子集的 $max)$ ,当属性为 $count$ 时, $F_i=\sum($ 子集的 $count)$ 等。

其他链接

IzayoiMiku

XinyueRao

AcWing