Description

一条链上有 \(n+1\) 个点,\(n+1\) 为关键节点。

可以额外选定 \(2\) 个关键点,每个点贡献为该点点权与该点后的关键节点到该点的距离最小值。

求所有点贡献总和最小值。

Solution

\(f_{i,t}\) 表示到 \(i\) 点共选了 \(t\) 个关键点,并且 \(i\) 点也选的最小值。

\(d\) 表示其前缀和。

\[\begin{aligned} f_{i,t}&=\min_{0\le j< i}\{f_{j,t-1}+\sum_{k=j+1}^i{w_k(d_i-d_k)}\}\\ &=\min_{0\le j<i}\{f_{j,t-1}+\sum_{k=j+1}^iw_kd_i-\sum_{k=j+1}^iw_kd_k\} \end{aligned} \]

\(sum_i=\sum_{k=0}^iw_id_i\),让 \(w\) 也表示为前缀和。

\[\begin{aligned} f_{i,t}&=\min_{0\le j<i}\{f_{j,t-1}+(w_i-w_j)d_i-sum_i+sum_j\}\\ &=\min_{0<j\le i}\{f_{j,t-1}+sum_j-w_jd_i\}-sum_i+w_id_i \end{aligned} \]

\[f_{j,t-1}+sum_j=w_jd_i+f_{i,t}+sum_i-w_id_i \]

斜率优化维护 \((w_j,f_{j,t-1}+sum_j)\) 的下凸壳即可。

时间复杂度为 \(O(n)\)

Code