前言
这些题全部口胡, 到李超线段树了再打代码
好累啊, 昨晚上不该太晚睡的, 中午他们期末也没睡, 精神萎靡
思路
先简化一下题意
对于 \(n\) 个点, 第 \(i\) 个点所在的位置为 \(x_i\) , 其有 \(p_i\) 个物品, 在 \(i\) 点建立仓库的费用为 \(c_i\) , 求建造仓库的点集 \(\mathbb{S}\) , 使得 $\displaystyle cost = \sum_{p \in \mathbb{S}} c_p + \sum_{p_k \in \mathbb{S}} \sum_{i = p_{k - 1} + 1}^{p_k - 1} p_i (x_i - x_{p_k}) $ 最小
容易发现, 问题可以进一步简化成
对于 \(n\) 个点, 第 \(i\) 个点所在的位置为 \(x_i\) , 其有 \(p_i\) 个物品, 在 \(i\) 点建立仓库的费用为 \(c_i\) , 将 \(n\) 个点划分成任意长度的段 \([L, R]\) , 一个段的花费为 \(\displaystyle c_R + \sum_{i = L}^{R} p_i (x_R - x_i)\)
容易发现贡献柿子可以进一步优化成
写成转移, 套路的令 \(f_i\) 表示考虑到前 \(i\) 个点的最优花费, 记 \(w_i\) 表示 \(x_i p_i\)
容易搞成斜率优化的形式, 简单的做即可
特别的, 有后缀 \(p_i = 0\) , 贪心的取 \({f_i}_{\min}\) 即可