#joi2016hoa. [joi2016ho_a]オレンジの出荷 (Oranges)
[joi2016ho_a]オレンジの出荷 (Oranges)
将以下文本翻译成中文,要求显示为markdown格式,不要渲染:
你是否了解 Juicy Orange Industry 公司?该公司的业务是种植和运输美味的橙子。在这里,我们简称为 JOI。
JOI 公司需要将收获的 N 个橙子装箱并运输出去。这些橙子按照大小排列在工厂上的传送带上,编号从 1 到 N。第 i 个橙子(1 ≤ i ≤ N)的大小是 Ai。
我们需要将这些橙子按顺序装入一些箱子中。每个箱子只能装连续编号的橙子。
每个箱子最多可以装 M 个橙子。将一些橙子装入一个箱子的成本可以通过公式 K + s × (a - b) 计算得到,其中 a 是装入箱子的最大橙子大小,b 是装入箱子的最小橙子大小,s 是装入箱子的橙子个数。这里的 K 是每个箱子的固定成本,对于所有箱子都是相同的。
为了尽量减小装箱的总成本,我们需要准备适当数量的箱子,并将所有橙子合理地装箱。
任务
请编写一个程序,根据传送带上的橙子信息、每个箱子的最大装载量以及箱子成本,计算出装箱的最小总成本。
输入
从标准输入读取以下输入:
- 第 1 行包含 3 个整数 N、M 和 K,以空格分隔。它们表示橙子数量为 N,每个箱子的最大装载量为 M,箱子成本为 K。
- 接下来的 N 行中的第 i 行(1 ≤ i ≤ N)包含一个整数 Ai。它表示第 i 个橙子的大小为 Ai。
输出
在标准输出中以一行输出装箱的最小总成本。
限制
所有输入数据满足以下条件:
- 1 ≤ N ≤ 20,000。
- 1 ≤ M ≤ 1,000。
- 0 ≤ K ≤ 1,000,000,000。
- 1 ≤ Ai ≤ 1,000,000,000(1 ≤ i ≤ N)。
- M ≤ N。
子任务
子任务 1 [20 分]
- 满足 N ≤ 20。
子任务 2 [50 分]
- 满足 N ≤ 2,000。
- 满足 M ≤ 100。
子任务 3 [30 分]
无需额外限制。
输入样例 1
6 3 6
1
2
3
1
2
1
输出样例 1
21
将橙子 1 到橙子 3 装入第 1 个箱子,将橙子 4 到橙子 6 装入第 2 个箱子,装箱的总成本为 (6 + 3 × (3 - 1)) + (6 + 3 × (2 - 1)) = 21。
由于无论如何装箱,装箱的总成本都不会低于 21,因此输出 21。
输入样例 2
16 4 12
3
10
13
10
19
9
12
16
11
2
19
9
13
2
13
19
输出样例 2
164
准备 11 个箱子,将它们分别装入 1、3、1、1、3、1、1、2、1、1、1 个橙子,可以得到装箱的最小总成本。
输入样例 3
16 6 14
19
7
2
15
17
7
14
12
3
14
5
10
17
20
19
12
输出样例 3
177
输入样例 4
10 1 1000000000
1
1
1
1
1
1
1
1
1
1
输出样例 4
10000000000
请注意,答案可能超出 32 位带符号整数的范围。