codeforces#P1839D. Ball Sorting
Ball Sorting
以下题面由 AI 翻译。
题目描述
有 $n$ 个彩色球排成一行。这些球被涂成 $n$ 种不同的颜色,用 $1$ 到 $n$ 的数字表示。从左数第 $i$ 个球的颜色是 $c_i$。你想要重新排列这些球,使得从左数第 $i$ 个球的颜色是 $i$。此外,你有 $k \ge 1$ 个颜色为 $0$ 的球可以在重排过程中使用。
由于球的特殊性质,只能通过以下操作重新排列:
- 在序列中的任意位置(两个相邻球之间、最左端之前或最右端之后)放置一个颜色为 $0$ 的球,同时保持其他球的相对顺序。此操作最多可执行 $k$ 次,因为你只有 $k$ 个颜色为 $0$ 的球。
- 选择任意一个颜色非零的球,且其至少有一个相邻的球颜色为 $0$,将该球移动到序列中的任意位置(保持其他球的相对顺序)。此操作可无限次执行,但每次操作需花费 $1$ 枚硬币。
操作可按任意顺序执行。最后一次操作后,所有颜色为 $0$ 的球会消失,留下一个由 $n$ 个非零颜色球组成的序列。
对于每个 $k$ 从 $1$ 到 $n$,求出在颜色为 $0$ 的球消失后,使得从左到右的球颜色依次为 $1$ 到 $n$ 所需的最小硬币花费。
输入格式
第一行包含整数 $t$ ($1 \le t \le 500$),表示测试用例的数量。
每个测试用例的第一行包含一个整数 $n$ ($1 \le n \le 500$),表示球的数量。
第二行包含 $n$ 个互不相同的整数 $c_1, c_2, \ldots, c_n$ ($1 \le c_i \le n$),表示从左到右的球的颜色。
保证所有测试用例的 $n$ 之和不超过 $500$。
输出格式
对于每个测试用例,输出 $n$ 个整数,其中第 $i$ 个 ($1 \le i \le n$) 表示当 $k = i$ 时的最小硬币花费。
样例数据
3
6
2 3 1 4 6 5
3
1 2 3
11
7 3 4 6 8 9 10 2 5 11 1
3 2 2 2 2 2
0 0 0
10 5 4 4 4 4 4 4 4 4 4
数据范围与提示
在第一个测试用例中,初始颜色为 $[2, 3, 1, 4, 6, 5]$。当 $k=1$ 时,可通过插入一个 $0$ 并多次移动非零球完成,花费 $3$ 硬币。当 $k \ge 2$ 时,插入更多 $0$ 可减少移动次数,最低花费为 $2$。
第二个测试用例中的球已处于正确顺序,所有 $k$ 的花费均为 $0$。