正反求两次lis
最后取和最大
用n减去以后就是最小
//合唱队形 #include<bits/stdc++.h> using namespace std; int a[105],dp[105],dp2[105]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } a[0]=0; // dp[1]=1; for(int i=1;i<=n;i++){ for(int j=0;j<i;j++){ if(a[i]>a[j]) dp[i]=max(dp[i],dp[j]+1); } } a[n+1]=0; // dp2[n]=1; for(int i=n;i>=1;i--){ for(int j=n+1;j>i;j--){ if(a[i]>a[j]) dp2[i]=max(dp2[i],dp2[j]+1); } } int ans=0; for(int i=1;i<=n;i++){ ans=max(ans,dp[i]+dp2[i]-1); } cout<<n-ans; return 0; }