链接: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;
}


京公网安备 11010502036488号