你有一个包含 $N$ 个像素的一维数组。每个像素都有一个值,用 $0$ 到 $255$ 之间的整数表示。两个像素之间的“距离”定义为它们数值的绝对差。
你可以执行以下操作零次或多次:
- 以成本 $D$ 删除任意像素,删除后其原本的相邻像素将变为相邻。
- 以成本 $I$ 在任意位置插入一个任意值的像素——可以在两个现有像素之间、第一个像素之前或最后一个像素之后。
- 修改任意像素的值。成本为该像素旧值与新值之差的绝对值。
如果数组中任意相邻像素之间的距离都不超过 $M$,则称该数组是“平滑的”。求出使数组变得平滑所需的操作序列的最小总成本。
注意:空数组(不包含任何像素的数组)被视为平滑的。
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例,每个测试用例包含两行。第一行格式为 "$D$ $I$ $M$ $N$",下一行包含 $N$ 个整数 $a_i$,表示从左到右的像素值。
输出格式
对于每个测试用例,输出一行 "Case #x: y",其中 $x$ 是测试用例编号(从 1 开始),$y$ 是使输入数组平滑的最小成本。
数据范围
所有输入数字均为整数。
$1 \le T \le 100$ $0 \le D, I, M, a_i \le 255$
小数据集(测试集 1 - 可见;12 分)
$1 \le N \le 3$
大数据集(测试集 2 - 隐藏;24 分)
$1 \le N \le 100$
样例
样例输入 1
2 6 6 2 3 1 7 5 100 1 5 3 1 50 7
样例输出 1
Case #1: 4 Case #2: 17
说明
在案例 #1 中,将 7 修改为 3 的成本为 4,这是最便宜的方案。在案例 #2 中,删除操作非常昂贵;通过插入元素使最终数组变为 [1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 50, 45, 40, 35, 30, 25, 20, 15, 10, 7] 会更便宜。