修正了 动态规划/DP 优化/斜率优化 中的一个错误。
(这个错误害人不浅)
将与 $j$ 无关的移到外面,我们得到
$$
-f_i - (s_i-L')^2=\min_{j<i}\{f_j+s_j^2 + 2s_j(s_i-L') \}
+f_i - (s_i-L')^2=\min_{j<i}\{f_j+s_j^2 + 2s_j(L'-s_i) \}
$$
考虑一次函数的斜截式 $y=kx+b$ ,将其移项得到 $b=y-kx$ 。我们将与 $j$ 有关的信息表示为 $y$ 的形式,把同时与 $i,j$ 有关的信息表示为 $kx$ ,把要最小化的信息(与 $i$ 有关的信息)表示为 $b$ ,也就是截距。具体地,设
\begin{aligned}
x_j&=s_j\\
y_j&=f_j+s_j^2\\
-k_i&=-2(s_i-L')\\
+k_i&=-2(L'-s_i)\\
b_i&=f_i-(s_i-L')^2\\
\end{aligned}
$$
则转移方程就写作 $b_i = \min_{j<i}\{ y_j-k_ix_j \}$ 。我们把 $(x_j,y_j)$ 看作二维平面上的点,则 $k_i$ 表示直线斜率, $b_i$ 表示一条过 $(x_j,y_j)$ 的斜率为 $k_i$ 的直线的截距。问题转化为了,选择合适的 $j$ ( $1\le j<i$ ),最小化直线的截距。
-![](../images/optimization.svg)
+![slope_optimization](../images/optimization.svg)
如图,我们将这个斜率为 $k_i$ 的直线从下往上平移,直到有一个点 $(x_p,y_p)$ 在这条直线上,则有 $b_i=y_p-k_ix_p$ ,这时 $b_i$ 取到最小值。算完 $f_i$ ,我们就把 $(x_i,y_i)$ 这个点加入点集中,以做为新的 DP 决策。那么,我们该如何维护点集?