ACM题目,排序.思路或者代码
问题描述:
ACM题目,排序.思路或者代码
【问题描述】
通常我们对一个长度为n(n≤24)的整数数列进行排序操作,其实就是讲他们按照从小到大的
顺序重整.一般情况下我们可以比较任意两个数之间的大小并交换他们的位置,但这里我们
限制只能数列的某一个前缀序列翻转,除此之外的任何操作都是不允许的.更精确地说,假
设数列a1,a2,……,an,一个合法的操作是把数列变为ak,ak-1,……,a2,a1,ak+1,ak+2,……,
an,其中1
答
如果没有相等的情况的话,那么输入可以看成是一个排列
每一种情况有2个分支.
分支1:将最大的数匹配到对应位置,这步可能花费1步或2步
分支2:获得排列的转置,该排列等价于其置换.这一步花费步数0
按最短路来写,需要判重,因为非常多重复状态,当n为24大概就10多万的状态点
如果输入有相等的情况,暂时没有好办法,估计数据中没有相等的情况,如果确实存在相等的情况,由于这是一个考察置换群的题目,那么看看有重复的置换群状态如何求吧