D-Drop Voicing
Drop Voicing
https://ac.nowcoder.com/acm/contest/5670/D
链接:https://ac.nowcoder.com/acm/contest/5670/D
来源:牛客网
题意:
给你一个长度为n的数列,有两种操作,1.Drop-2,把倒数第二个数往前移,其余整体后移,2.Invert,把最后一个数往前移,其余整体后移。两种操作,连续做某种操作,当作一次,问你最少要进行多少次连续操作,使这个序列有序上升
##solution:
寻找以任意一个数为起点的最长上升子序列
#include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f int n,a[505],c[505],maxn=0; int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) { memset(c,INF,sizeof(c)); for(int j=0;j<n;j++) { *lower_bound(c,c+n,a[(i+j)%n])=a[(i+j)%n]; } maxn=max(maxn,(int)(lower_bound(c,c+n,INF)-c)); } cout<<n-maxn; }