CF2220A Blocked
题目描述
给定一个大小为 $n$ 的整数数组 $a$,我们称位置 $1 \le i \le n$ 被“阻塞”,如果 $a_i$ 可以被表示为 $a_1, a_2, \ldots, a_{i-1}$ 的某个子集的和(即存在 $1 \le j_1 < j_2 < \ldots < j_k \le i-1$,使得 $a_{j_1} + a_{j_2} + \ldots + a_{j_k} = a_i$)。请重新排列 $a$,使得没有一个位置被阻塞;如果无法做到,请输出 -1。
例如,将数组 $[3, 2, 5]$ 重新排列为 $[2, 3, 5]$,位置 3 就被阻塞了,因为可以表示 $5 = 2 + 3$;但如果排列为 $[3, 5, 2]$,则没有一个位置被阻塞。
输入格式
每个测试点包含多组测试用例。第一行包含测试用例数 $t$($1 \le t \le 400$)。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 200$)。
第二行包含 $n$ 个整数,表示数组 $a$($1 \le a_i \le 100$)。
输出格式
对于每个测试用例,输出任意一种没有任何位置被阻塞的排列,如果不存在则输出 $-1$。
说明/提示
在第三个测试用例中,数组 $[3, 1, 2]$ 没有任何位置被阻塞:
位置 1 没有被阻塞,因为 $3$ 不能被空集合的和表示。
位置 2 没有被阻塞,因为 $1$ 不能被 $[3]$ 的子集和表示。
位置 3 没有被阻塞,因为 $2$ 不能被 $[3, 1]$ 的子集和表示。
由 ChatGPT 5 翻译