思路:将队列分成两部分(从第o个数分开),左边找最长上升子序列,右边找最长下降子序列,将两个相加求出队列最多能留下多少人
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,x,s=0,sum=0,ans=0;
cin>>a;
int b[a+1],c[a+1],d[a+1];
for(int i=1;i<=a;i++){
cin>>b[i];
c[i]=1;
d[i]=1;
}
for(int o=1;o<=a;o++){
for(int i=1;i<=o;i++){
for(int j=1;j<i;j++){
if(b[j]<b[i]) c[i]=max(c[i],c[j]+1);
if(c[i]>ans){
ans=c[i];
x=i;
}
}
}
for(int i=x+1;i<=a;i++){
for(int j=x;j<i;j++){
if(b[j]>b[i]) d[i]=max(d[i],d[j]+1);
sum=max(d[i],sum);
}
}
s=max(ans+sum-1,s);
}
cout<<a-s;
}