前言
这些题全部口胡, 到李超线段树了再打代码
好累啊, 昨晚上不该太晚睡的, 中午他们期末也没睡, 精神萎靡
思路
先简化一下题意
对于 \(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)\)
容易发现贡献柿子可以进一步优化成
\[\begin{align*} & c_R + \sum_{i = L}^{R} p_i (x_R - x_i) \\ = & c_R + \sum_{i = L}^{R} x_R p_i -x_i p_i \\ \end{align*} \]写成转移, 套路的令 \(f_i\) 表示考虑到前 \(i\) 个点的最优花费, 记 \(w_i\) 表示 \(x_i p_i\)
\[\begin{align*} f_i & = \min_{j = 0}^{i - 1} f_j + c_i + x_i (prep_i - prep_j) - (prew_i - prew_j) \\ & = x_i prep_i - prew_i + \min_{j = 0}^{i - 1} f_j - x_i prep_j + prew_j \end{align*} \]容易搞成斜率优化的形式, 简单的做即可
特别的, 有后缀 \(p_i = 0\) , 贪心的取 \({f_i}_{\min}\) 即可
标签:个点,仓库,align,prep,建设,ZJOI2007,prew,sum From: https://www.cnblogs.com/YzaCsp/p/18664255