题解:正序求最大单调递增序列,逆序求最大单调序列,
之后求出最大值dp1[i]+dp2[i],减去本身记录了两次
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 200;
int max(int a,int b){
return a>b?a:b;
}
int dp1[MAXN];
int dp2[MAXN];
int num[MAXN];
int main(){
int N;
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&num[i]);
dp1[i]=1;dp2[i]=1;
}
for(int i=0;i<N;i++){
for(int j=0;j<i;j++){
if(num[i]>num[j])dp1[i]=max(dp1[j]+1,dp1[i]);
}
}
for(int i=N-1;i>=0;i--){
for(int j=i+1;j<N;j++){
if(num[i]>num[j])dp2[i]=max(dp2[j]+1,dp2[i]);
}
}
int maxx=0;
for(int i=0;i<N;i++){
maxx=max(maxx,dp1[i]+dp2[i]-1);
}
printf("%d\n",N-maxx);
return 0;
}