一条链上有 \(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)\)。