最长【先递增后递减子序列】

#include <iostream>
using namespace std;


//合唱队形
int num[110];
int inde[110];
int dp[110];

int maxincrease(int n){
    for(int i=0;i<110;i++)inde[i]=0;
    inde[0]=1;
    for(int i=1;i<=n;i++){
        inde[i]=1;
        for(int j=0;j<i;j++){
            if(num[j]<num[i])
                inde[i]=max(inde[i],inde[j]+1);
        }
    }
    return inde[n];
}

int maxdecrease(int k,int n){
    for(int i=0;i<110;i++)inde[i]=0;
    inde[n-1]=1;
    for(int i=n-2;i>=k;i--){
        inde[i]=1;
        for(int j=n-1;j>i;j--){
            if(num[j]<num[i])
                inde[i]=max(inde[i],inde[j]+1);
        }
    }
    return inde[k];
}

int maxinde(int n){
    int ans=0;
    for(int i=0;i<n;i++){
      dp[i]=maxincrease(i)+maxdecrease(i,n)-1;
      ans=max(dp[i],ans);
    }
    return n-ans;
}

int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>num[i];
    }
    int ans=maxinde(n);
    cout<<ans<<endl;
    return 0;
}