0 #P1010. [HNOI2008]玩具装箱toy
[HNOI2008]玩具装箱toy
[HNOI2008] 玩具装箱
题目描述
P 教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中。
P 教授有编号为 的 件玩具,第 件玩具经过压缩后的一维长度为 。
为了方便整理,P教授要求:
- 在一个一维容器中的玩具编号是连续的。
- 同时如果一个一维容器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物。形式地说,如果将第 件玩具到第 个玩具放到一个容器中,那么容器的长度将为 。
制作容器的费用与容器的长度有关,根据教授研究,如果容器长度为 ,其制作费用为 。其中 是一个常量。P 教授不关心容器的数目,他可以制作出任意长度的容器,甚至超过 。但他希望所有容器的总费用最小。
输入格式
第一行有两个整数,用一个空格隔开,分别代表 和 。
第 到 第 行,每行一个整数,第 行的整数代表第 件玩具的长度 。
输出格式
输出一行一个整数,代表所有容器的总费用最小是多少。
样例 #1
样例输入 #1
5 4
3
4
2
1
4
样例输出 #1
1
提示
对于全部的测试点,,,。
原式:
$$dp[i] = \min_{j} \left( dp[j] + \left( \sum_{k=j+1}^i a_k + (i-j-1-L) \right)^2 \right) $$- 定义前缀和 ,则 是区间 的和。
- 令 ,因此,原式中的表达式可简化为:$$dp[i] = \min_{j} \left( dp[j] + (f[i] - f[j] - c)^2 \right) $$
假设条件:
- 对于当前 ,若 比 更优,则:$$dp[j] + (f[i] - f[j] - c)^2 \leq dp[k] + (f[i] - f[k] - c)^2 \quad (1) $$
- 引入变量 :
- 设 ,其中 (因 单调递增)。
- 代入式:$$dp[j] + (f[i] + v - f[j] - c)^2 \leq dp[k] + (f[i] + v - f[k] - c)^2 $$
- 展开平方项:$$\underbrace{dp[j] + (f[i] - f[j] - c)^2}_{\text{式 (1) 左边}} + 2v(f[i] - f[j] - c) + v^2 \leq \underbrace{dp[k] + (f[i] - f[k] - c)^2}_{\text{式 (1) 右边}} + 2v(f[i] - f[k] - c) + v^2 $$
- 消去相同项 ,并利用式 (1) 的不等式:
- 简化后得到:
结论: 因 单调递增,只需按 的顺序枚举(从 到 ),即可保证 (若 )。
展开式 (1):
$$dp[j] + (f[i] - f[j] - c)^2 \leq dp[k] + (f[i] - f[k] - c)^2 $$- 展开平方项:$$dp[j] + f[i]^2 - 2f[i](f[j] + c) + (f[j] + c)^2 \leq dp[k] + f[i]^2 - 2f[i](f[k] + c) + (f[k] + c)^2 $$
- 消去 ,移项整理:$$dp[j] - dp[k] + (f[j] + c)^2 - (f[k] + c)^2 \leq 2f[i] \left( f[j] - f[k] \right) $$
- 将左侧因式分解:$$\frac{(dp[j] + (f[j] + c)^2) - (dp[k] + (f[k] + c)^2)}{2(f[j] - f[k])} \leq f[i] $$
- 定义斜率形式:$$\text{Slope}(k, j) = \frac{Y_j - Y_k}{X_j - X_k} \quad \text{其中} \ Y_j = dp[j] + (f[j] + c)^2, \ X_j = f[j] $$因此,原式可写为:
结论: 当 时, 比 更优。
操作规则:
- 删除队头(冗余决策点):
- 若队列前两个点 的斜率满足: 则 不如 优,可删除 。
- 删除队尾(非凸性点):
- 若队列末尾三个点 的斜率满足:$$\text{Slope}(q[r-1], q[r]) \geq \text{Slope}(q[r], i) $$则 的斜率不够“陡”,可删除 ,以保持队列的凸性。
依据: 凸包维护的单调队列优化技巧,确保决策点按斜率递增顺序排列 。