slope trick 小记

· · 个人记录

学习的过程比较艰辛,搞了半天才搞明白,所以记录一下。

适用范围

优化形如 f_{i,j}=|x_i-j|+\min f_{i-1,k} 的 DP 转移。

原理

由于绝对值函数是连续,下凸的一次函数,因此几个绝对值函数相加仍然满足这一特点,即归纳证明将 DP 式子的第二维当做横坐标后,每个 f_i 的图像也满足这一特点。我们考虑存储每次斜率 +1 的横坐标,从而快速转移 DP。

解题方法

首先尝试列出朴素的 n^2 DP式子,如最开始的例子。然后考虑 k 的取值范围。假设每次转移中 k 的取值范围是 [l_i,r_i],则整个函数有以下变化:

由这 3 条关键信息,我们可以用堆来维护点集。比较好的例子是 CF1534G,感觉是整个过程最完整的一道题。