显然有一个性质,任何时候在 $i$ 点结束,则 $i$ 一定要建立一个仓库。定义状态 $f _ i$ 表示在 $i$ 点建立仓库 $1\ldotsi$ 完成的最小代价。那么则有 $$ \begin {aligned} f _ i & = c _ i + \min _ {j < i} \{ f _ j + \sum _ {k = j + 1} ^ i p _ k (d _ i - d _ k) \} \\ & = c _ i + \min _ {j < i} \{ f _ j + d _ i \sum _ {k = j + 1} ^ i p _ k - \sum _ {k = j + 1} ^ i p _ k d _ k) \} \end {aligned} $$ 对 $p$ 和 $pd$ 做前缀和, $$ \begin {aligned} & f _ i = c _ i + \min _ {j < i} \{ f _ j + d _ i (sp _ i - sp _ j) - (sdp _ i - sdp _j) \} \\ \Longrightarrow & f _ i - c _ i - d _ i sp _ i + sdp _ i= \min _ {j < i} \{ f _ j + sdp _j - d _ i sp _ j \} \end {aligned} $$ 维护下凸包斜率优化即可。
Hack :存在 $p _ i = 0$ 。这意味着存在 $sp _ i = sp _ j$ 以及 $sdp _ i = sdp _ j$ ,此时点重合,斜率不存在,重复的点不添加即可;在取答案时,不一定在 $f _ n$ ,最后一段 $p _ i = 0$ 的区间和第一个 $p _ i \neq 0$ 的点均可以取答案。