他人原创题,转载请务必注明出处
1.玩具装箱(toy.pas/c/cpp) Time Limit: 1000MS Memory Limit: 256M
【问题描述】
XXX喜欢玩具,家里有N个玩具,有一天,她想让玩具们晒晒太阳,XXX把所有的玩具都拿出来摆成一排,从左到右依次编号为1~N。每个玩具大小不一,玩具i的大小为Ai。
太阳下山了,XXX开始收玩具了,现在将这些玩具从左开始依次装成若干箱,每个箱子只能装最多M个且编号连续的玩具。在某个箱子里装若干个玩具的费用计算方法:如果该箱子里最大的玩具为a,最小的为b,玩具个数为s,则费用为K+s*(a-b)。这里的K是箱子本身的费用,所有箱子的费用都相等。
XXX想知道把将所有玩具都装进箱里的最小费是多少?
【输入】
第一行为3个整数N, M, K,用空格分隔。N为玩具个数,M为每个箱子最多能装的玩具个数,K为箱子本身的费用。
以下N行第i行(1<=i<=N)为整数Ai,表示第i个玩具的大小。
【输出】
输出为一个整数,表示装箱费用总和的最小值。
【输入输出样例】
toy.in
6 3 6
1
2
3
1
2
1
toy.out
21
样例解释:
第一个箱子里装玩具1~3,第二个里装4~6,开销总和为(6+3×(3−1))+(6+3×(2−1)) = 21。这是最小可能的开销总和,所以输出21。
【数据范围】
60%的数据满足:N,M<=20;
80%的数据满足:N<=2 000,M<=100;
100%的数据满足:1<=N<=20 000,1<=M<=1 000,0<=K<=1 000 000 000,
1<=Ai<=1 000 000 000 (1