#include<bits/stdc++.h> using namespace std; //动态规划,类似于求数组的最大递增子序列 int a[3030],b[3030]=,c[3030]; //b数组用于记录从第 1 个元素到第 i 个元素的最大 递增 子序列长度 //c数组用于记录从第 i 个元素到第 n 个元素的最大 递减 子序列长度 int main(){ int n;cin>>n; for(int i=1;i<=n;i++)scanf("%d",&a[i]),c[i]=1,b[i]=1; //由于每一个元素都算一个长度为1的递增子序列,初始值为1 for(int i=1;i<=n;i++){ for(int j=1;j<i;j++){ if(a[i]>a[j])b[i]=max(b[i],b[j]+1); //对于第i个元素,计算出从第1个到第i个元素最长子序列 } } //for(int i=1;i<=n;i++)cout<<" "<<b[i];cout<<endl; for(int i=n;i>=1;i--){ for(int j=n;j>i;j--){ if(a[i]>a[j])c[i]=max(c[i],c[j]+1); //对于第i个元素,计算出从第i个到第n个元素最长子序列 } } int sum=3999999; for(int i=2;i<n;i++){ sum=min(sum,n-b[i]-c[i]+1); //要去除本身的影响,所以合唱队的长度应该为b[i]+c[i]-1 } cout<<sum; return 0; }