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次,求出最大的最长上升子序列。

渣渣代码就不放了。

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 10:46
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务