题意
n n n张卡牌,每张卡牌的正面是数字 a a a ,背面是数字 b b b。操作:交换相邻的两张卡牌,然后翻转。问最少需要多少次操作使得卡牌朝上的数字组成非递减数列?
( n < = 18 n <= 18 n<=18, 1 < = a , b < = 50 1 <= a, b <=50 1<=a,b<=50)
题解
n n n比较小,不是DFS就是状压DP
首先,多动笔会发现:同一张卡牌被交换奇数次后,卡牌的背面朝上,如果是偶数次,卡牌的正面朝上。
然后,枚举有哪些位置的卡牌在**最终状态(朝上的数字构成非递减数列)**是被翻转过的。比如, i i i 位置的卡牌被标记为1,表示第 i i i 张卡牌在最终状态是背面朝上的(交换了奇数次);如果是0,则正面朝上(交换了偶数次)。
通过枚举,我们可以推出最终状态,所以我们仅仅需要完成两个工作:①能否匹配 ②正确计算逆序对
-
匹配:假设第 i i i 张卡牌被标记为1,它在最终状态中的位置为 j j j。如果