CF1847A.The Man who became a God

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

The Man who became a God

题目描述

Kars 厌倦并且对村庄里人们的狭隘思想感到不满,因为他们满足于现状,并不试图成为完美的生命体。作为一名顶尖的发明家,Kars 希望增强自己的身体,成为完美的生命体。不幸的是,村庄里的 nn 个村民开始对他的想法产生怀疑。第 ii 个村民对他有 aia_i 的怀疑度。每个村民单独面对 Kars 时都很害怕,于是他们会组成小组来增强力量。

从第 ll 个村民到第 rr 个村民组成的小组的力量定义为 f(l,r)f(l,r),其中

$$f(l,r) = |a_l - a_{l+1}| + |a_{l + 1} - a_{l + 2}| + \ldots + |a_{r-1} - a_r|$$

这里 xy|x-y| 表示 xyx-y 的绝对值。只有一个村民的小组力量为 00

Kars 想要将村民恰好分成 kk 个连续的小组,使得所有小组力量之和最小。形式化地,他需要找到 k1k-1 个正整数 1r1<r2<<rk1<n1 \le r_1 < r_2 < \ldots < r_{k-1} < n,使得 $f(1, r_1) + f(r_1 + 1, r_2) + \ldots + f(r_{k-1} + 1, n)$ 的值最小。请帮助 Kars 求出 $f(1, r_1) + f(r_1 + 1, r_2) + \ldots + f(r_{k-1} + 1, n)$ 的最小值。

输入格式

第一行包含一个整数 tt (1t100)(1 \leq t \leq 100),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含两个整数 n,kn, k (1kn100)(1 \leq k \leq n \leq 100),分别表示村民的数量和需要分成的小组数。

每个测试用例的第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n (1ai500)(1 \leq a_i \leq 500),表示每个村民的怀疑度。

输出格式

对于每个测试用例,输出一个整数,表示所有小组力量之和的最小可能值,即 $f(1,r_1) + f(r_1 + 1, r_2) + \ldots + f(r_{k-1} + 1, n)$ 的最小值。

说明/提示

在第一个测试用例中,我们将怀疑度为 (1,3,5,2)(1,3,5,2) 的村民分为 (1,3,5)(1,3,5)(2)(2) 两组。于是 $f(1,3) + f(4,4) = (|1 - 3| + |3 - 5|) + 0 = 4 + 0 = 4$。

在第二个测试用例中,我们将怀疑度为 (1,9,12,4,7,2)(1,9,12,4,7,2) 的村民分为 (1),(9,12),(4,7,2)(1),(9,12),(4,7,2) 三组。于是 f(1,1)+f(2,3)+f(4,6)=0+3+8=11f(1,1) + f(2,3) + f(4,6) = 0 + 3 + 8 = 11

由 ChatGPT 4.1 翻译

样例

3
4 2
1 3 5 2
6 3
1 9 12 4 7 2
12 8
1 9 8 2 3 3 1 8 7 7 9 2
4
11
2

在线编程 IDE

建议全屏模式获得最佳体验