【勘误】题目没说清楚,不一定严格的先增后减,单调增/减也可以
【思路】
求从0开始、以i结束的最长递增序列
求从i开始、以n结束的最长递减序列
再根据以上两个数组求出以k为分割点的最长合唱队形
最后减法得出最少出列个数
#include<iostream>
#include<math.h>
using namespace std;


int main(){
    
    int n;
    int height[100];
    int before[100],after[100],dp[100];
    while(cin>>n){
        for(int i=0;i<n;i++){
            cin>>height[i];
        }
        
        for(int i=0;i<n;i++){
            before[i] = 0;
            after[i] = 0;
        }
        
        for(int i=0;i<n;i++){
            before[i] = 0;
            for(int j=0;j<i;j++){
                if(height[j]<height[i]){
                    before[i] = max(before[i],before[j]+1);
                }
            }
        }
        for(int i=n-1;i>=0;i--){
            after[i] = 0;
            for(int j=n-1;j>i;j--){
                if(height[j]<height[i]){
                    after[i] = max(after[i],after[j]+1);
                }
            }
        }
        int maxSelect = 0;
        for(int i=0;i<n;i++){
            dp[i] = before[i]+after[i]+1;
            if(dp[i]>maxSelect) maxSelect = dp[i];
        }
            
        cout<<n-maxSelect<<endl;
    }
    
}