CF38E Let's Go Rolling!

题目描述

在一条从左到右延伸的数轴上,$n$ 个弹珠位于坐标 $x_{1}, x_{2}, ..., x_{n}$ 上。我们假设弹珠的体积无限小,即在本题中每个弹珠都被视作质点。你可以在其中一些弹珠上插针,第 $i$ 个弹珠插针的花费为 $c_{i}$,$c_{i}$ 可能为负数。当你完成选择并插好针后,弹珠会按照如下规则向左滚动:若弹珠上插了针,则该弹珠不动;否则该弹珠一直向左滚动,直到遇到最近的一个有针的弹珠并停在那里。如果左侧没有任何有针的弹珠,则该弹珠会滚到左无穷远,这会导致你需要支付无穷大的罚款。如果没有弹珠滚向无穷远,则罚金包括两部分: - 所有插针弹珠的花费之和; - 每个弹珠移动距离的总和,即每个弹珠初始位置和最终位置之差的绝对值之和。 你的任务是选择在某些弹珠上插针,使得你需要支付的罚金尽可能小。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 3000$),表示弹珠的数量。接下来的 $n$ 行中,每一行包含两个整数 $x_{i}$ 和 $c_{i}$($-10^{9} \leq x_{i}, c_{i} \leq 10^{9}$),分别表示第 $i$ 个弹珠的位置和在其上插针的花费。每组数据之间用空格隔开。每个描述单独一行。任意两个弹珠不会处于相同的位置。

输出格式

输出一个整数,表示你需要支付的最小罚金。

说明/提示

由 ChatGPT 5 翻译