问题 5591 --最小代价

5591: 最小代价★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 24  解决: 12
[提交][状态][命题人:]

题目描述

给定一个非递减序列a1,a2an(对于序列中的所有元素,ai≥ai1都成立)和一个正整数k

你被要求将该序列划分成k个连续的非空子序列。请注意,原序列中的每个元素都应该包含在一个子序列中且只能在一个子序列中。

max(i)为第i个子序列中所有元素的最大值,min(i)为第i个子序中所有元素的最小值。定义划分的代价为:s=(max(1)-min(1))+(max(2)-min(2))+...... +(max(k)-min(k)),即总代价为k个子序列中最大值-最小值之和。例如,如果a=[2,4,5,5,8,11,19],我们可以将它分成以下3个子序列:[2,4][5,5][8,11,19],那么划分的代价等于:(4−2)+(5−5)+(19−8)=13。显然,划分方法有很多种,代价也不同。

现给定一个非递减序列a和一个整数k,请计算将序列a划分成k个连续的非空子序列所能获得的最小代价。

输入

第一行共两个整数:nk1<=k<=n <=3*105

第二行共n个整数,为a1,a2,……,ai,……,an的值(1<=ai<=109,  ai>=ai-1

输出

一行一个整数:将序列a划分成k个连续的非空子序列所能获得的最小代价。
样例输入
Copy
6 3
4 8 15 16 23 42
样例输出
Copy
12

提示

样例2输入:

4 4

1 3 3 7

样例2输出:

0

样例3输入:

8 1

1 1 2 3 5 8 13 21

样例3输出:

20


在第一个测试样例中,我们可以将序列a划分为以下三个子序列: [4,8,15,16], [23], [42],代价为:(16-4+23-23+24-24=12,再没有其他划分方案比它更优。

       在第二个测试样例中,我们只能将序列a划分为以下四个子序列:[1], [3], [3], [7],代价为:(1-1)+(3-3)+(3-3) + (7-7)=0.


在第三个测试样例中,只需要划分为1个子序列,即为:[1, 1, 2, 3, 5, 8, 13, 21], 代价为:21-1=20.

来源

 

[提交][状态]