#D0986. 积木归堆

积木归堆

题目描述

数轴上有 nn 块积木,第 ii 块积木在坐标 xix_i 上。一开始每块积木各自是一堆。

每次操作,你可以选择两堆相邻的积木(也就是它们之间没有其他积木堆),把其中一堆整体搬到另一堆所在的坐标,两堆合成一堆。把一堆积木从坐标 XX 搬到坐标 YY 需要消耗 ∣X−Y∣|X-Y| 的能量。

Tom 想让积木堆的数量不超过 mm,请你帮他求出需要消耗的最少能量。

输入格式

第一行两个整数 n,mn,m,分别表示积木数量和允许的最大堆数。

第二行 nn 个整数 x1,x2,…,xnx_1,x_2,\dots,x_n,表示每块积木的坐标,相邻两个整数之间用一个空格隔开。

输出格式

一行,一个整数,表示最少需要消耗的能量。

样例

4 1
10 5 3 12
9
4 2
1 20 3 100
19
3 3
5 1 3
0

样例解释

样例 1 中,把坐标 33 的积木并到 55(消耗 22),再把这一堆并到 1010(消耗 55),最后并到 1212(消耗 22),一共消耗 99 能量,只剩 11 堆。

样例 2 中,把坐标 11 的积木并到 33(消耗 22),把坐标 2020 的积木并到 33(消耗 1717),一共消耗 1919 能量,剩下坐标 33 与 100100 两堆。

样例 3 中,已经有 33 堆,不超过 m=3m=3,不需要搬运,消耗 00。

数据范围与约定

子任务 分值 限制
11 3030 1≤n≤1031\le n\le 10^3,m=1m=1,−103≤xi≤103-10^3\le x_i\le 10^3
22 1≤n≤1031\le n\le 10^3,1≤m≤n1\le m\le n,−103≤xi≤103-10^3\le x_i\le 10^3
33 4040 1≤n≤1061\le n\le 10^6,1≤m≤n1\le m\le n,−109≤xi≤109-10^9\le x_i\le 10^9

对于 100%100\% 的数据,1≤n≤1061\le n\le 10^6,1≤m≤n1\le m\le n,−109≤xi≤109-10^9\le x_i\le 10^9。