UVA103 Stacking Boxes
题目描述
数学和计算机科学中的一些概念在一维或二维时很简单,但在推广到任意维度时会变得复杂。例如,求解多维微分方程和分析 $n$ 维超立方体的拓扑结构。前者比其一维情形复杂得多,而后者则与其“低维亲戚”具有显著的相似性。
考虑一个由各维度给定的 $n$ 维“盒子”。在二维中,盒子 $(2,3)$ 表示一个长为 $2$ 单位、宽为 $3$ 单位的盒子。在三维中,盒子 $(4,8,9)$ 可以表示一个 $4 \times 8 \times 9$ 的盒子(长、宽、高)。在六维中,盒子 $(4,5,6,7,8,9)$ 的含义可能不太明确,但我们可以分析盒子的某些性质,例如其维度之和。
在本问题中,你需要分析一组 $n$ 维盒子的一个性质:确定最长的嵌套盒子串。即一个盒子序列 $b_1, b_2, \ldots, b_k$,其中每个盒子 $b_i$ 可以嵌套在盒子 $b_{i+1}$ 中($1 \leq i < k$)。
盒子 $D = (d_1, d_2, \ldots, d_n)$ 可以嵌套在盒子 $E = (e_1, e_2, \ldots, e_n)$ 中,如果存在 $d_i$ 的某种重新排列,使得重新排列后的每个维度都小于 $E$ 中对应的维度。这类似于将盒子 $D$ 旋转以查看是否能放入盒子 $E$ 中。但由于允许任意重新排列,盒子 $D$ 可以被扭曲而不仅仅是旋转(参见以下示例)。
例如,盒子 $D = (2,6)$ 可以嵌套在盒子 $E = (7,3)$ 中,因为 $D$ 可以重新排列为 $(6,2)$,使得每个维度都小于 $E$ 中的对应维度。盒子 $D = (9,5,7,3)$ 不能嵌套在盒子 $E = (2,10,6,8)$ 中,因为无论如何重新排列 $D$,都无法满足嵌套条件;但盒子 $F = (9,5,7,1)$ 可以嵌套在 $E$ 中,因为 $F$ 可以重新排列为 $(1,9,5,7)$,从而嵌套在 $E$ 中。
正式定义嵌套如下:盒子 $D = (d_1, d_2, \ldots, d_n)$ 可以嵌套在盒子 $E = (e_1, e_2, \ldots, e_n)$ 中,如果存在 $1 \ldots n$ 的一个排列 $\pi$,使得 $(d_{\pi(1)}, d_{\pi(2)}, \ldots, d_{\pi(n)})$ “适配”于 $(e_1, e_2, \ldots, e_n)$,即对于所有 $1 \leq i \leq n$,满足 $d_{\pi(i)} < e_i$。
输入格式
输入由一系列盒子序列组成。每个盒子序列的第一行包含两个数字:序列中的盒子数量 $k$ 和盒子的维度 $n$(在同一行给出)。
接下来的 $k$ 行,每行描述一个盒子,包含该盒子的 $n$ 个测量值,这些值之间用一个或多个空格分隔。序列中的第 $i$ 行($1 \leq i \leq k$)表示第 $i$ 个盒子的测量值。
输入文件中可能包含多个盒子序列。你的程序需要处理所有序列,并针对每个序列确定哪些盒子可以构成最长的嵌套串,以及该嵌套串的长度(即串中盒子的数量)。
在本问题中,盒子的最大维度为 $10$,最小维度为 $1$。每个序列中盒子的最大数量为 $30$。[](奶龙标记)
输出格式
对于输入文件中的每个盒子序列,首先在一行输出最长嵌套串的长度,然后在下一行按顺序输出组成该嵌套串的盒子编号。嵌套串中"最小"或"最内层"的盒子应排在第一位,后续盒子(如果存在)依次排列。
盒子的编号应按照它们在输入文件中出现的顺序确定(第一个盒子编号为 $1$,以此类推)。
如果存在多个相同长度的最长嵌套串,输出其中任意一个即可。