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

渣渣代码就不放了。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 12:10
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
昨天 11:08
门头沟学院 Java
投递京东等公司9个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务