$$ \newcommand{\seq}[2]{{#1}_{1},{#1}_{2},\cdots,{#1}_{#2}} \newcommand{\num}[1]{1,2,\cdots,#1} \newcommand{\stra}[2]{\begin{bmatrix}#1 \\ #2\end{bmatrix}} \newcommand{\strb}[2]{\begin{Bmatrix}#1 \\ #2\end{Bmatrix}} \newcommand{\dw}[1]{\underline{#1}} \newcommand{\up}[1]{\overline{#1}} $$

斜率优化dp*

详细教程

https://www.cnblogs.com/orzzz/p/7885971.html

以下面的一道例题为例。

A.HDU 3507

给出 \(N\) 个单词,每个单词有个非负权值 \(C_i\) ,现要将它们分成连续的若干段,每段的代价为此段单词的权值和,还要加一个常数 \(M\) ,即 \((\sum Ci)^2+M\) 。现在想求出一种最优方案,使得总费用之和最小。 \((0 ≤ n ≤ 500000, 0 ≤ M ≤ 1000)\)

首先考虑 \(n^2\) dp。

\[sum[i]=\sum_{j=1}^i C_j \]

\[dp[i]=\min(dp[j]+(sum[i]-sum[j])^2+M) \]

考虑如何优化。
\(j_1>j_2\) ,且 \(j_1\) 优于 \(j_2\)

\[dp[j_1]+sum[i]^2+sum[j_1]^2-2*sum[i]*sum[j_1]+M<dp[j_2]+sum[i]^2+sum[j_2]^2-2*sum[i]*sum[j_2]+M$$\ $$dp[j_1]+sum[j_1]^2-dp[j_2]-sum[j_2]^2<2*sum[i]*(sum[j_1]-sum[j_2])\]

\[2*sum[i]>\frac{dp[j_1]+sum[j_1]^2-dp[j_2]-sum[j_2]^2}{sum[j_1]-sum[j_2]} \]

posted @ 2019-05-18 14:28  chc_1234567890  阅读(94)  评论(0编辑  收藏  举报