D Drop Voicing
Drop Voicing
https://ac.nowcoder.com/acm/contest/5670/D
题目大意:有两种操作,1.整个数组执行若干次循环移位,2.前n-1个元素执行若干个循环移位。问,把一个全排列排成升序最少要执行多少次第二种操作。
我们再把两种操作组合一下,按照1 2 1来组合,我们发现可以等价于把任意一个数放在任意的地方。
直觉证明:
1 2 3 4 5
我们通过三个操作把5放在3前面
通过1操作,把要移动的数放在最后一个,1 2 3 4 5。
通过2操作,选择要移动到的位置4 1 2 3 5
通过1操作,大概还原一下数组 1 2 3 5 4
所以问题等价于:把任意一个数放在任意的地方,将数组排成升序,求最少要移动多少次。
显然答案是数组长度减去最长上升子序列的长度。因为子序列中的数是不用动的。
要注意数组是可以循环移位的,所以可以直接求n次,求出最大的最长上升子序列。
渣渣代码就不放了。