DTOJ4356. 排列(perm)

题意:

给一个长度为n的排列,可以进行任意次操作,每次操作都将一个逆序对翻转,求可以到达的不同的序列的个数。
n<=20

题解:

求方案数这个问题太难,先考虑一个简单一点的问题:已知一个排列,判断它是否能到达。考虑翻转的过程,对于每一次操作,都是将大的数向后移,将小的数向前移的过程,所以最大的数右移完后就不动了,同理,次大的数在最大的数后,它也只能右移,然后不动。于是从大到小考虑每一个数,发现这个序列要可达,当且仅当比它大的数的位置能一一对应到原序列中不在它后面比它大的数的位置,因为对于每一个比它大的数,在之前的交换中,若有被交换到前面,也只会交换到更大的数的位置,故不可能对应到更前面的位置。这样,计算方案数就显然,仍然从大到小枚举,n很小,所以记录下每个位置是否选过,枚举当前数的位置即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值