#P2275. Flipping Pancake
Flipping Pancake
描述
我们从一个包含 个不同大小煎饼的堆栈开始。问题要求将这个堆栈转换为按大小排序的堆栈,其中最小的煎饼在顶部,最大的煎饼在底部。为此,我们被允许将顶部 个煎饼作为一个整体进行翻转(这样第 个煎饼现在位于顶部,而原先顶部的煎饼现在位于第 个位置)。
例如:
本问题要求编写一个程序,找到最多 次翻转的序列,将给定的煎饼堆栈转换为有序堆栈。
输入格式
输入的每一行提供一个独立的数据集,由空格分隔的数字组成。每行的第一个数字表示数据集中的煎饼数量 。当 为 0 时输入结束(该行没有其他数据)。数据集的其余部分是数字 1 到 的某种排列,表示初始的煎饼堆栈。 这些数字表示煎饼的相对大小。 最多为 30。
输出格式
对于每个数据集,输出一行由空格分隔的数字序列。每行的第一个数字 表示排序煎饼所需的翻转次数。该数字后面跟着 个数字,每个数字表示在相应的排序步骤中要翻转的煎饼数量。某些数据集可能有多个正确的解。例如,对于下面的第一个问题, 也是一个有效的解。
输入样例 1
3 1 3 2
5 4 3 2 5 1
0
输出样例 1
3 2 3 2
3 3 4 5
来源 Greater New York 2004