和Acwing1014登山题代码几乎一样
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main(){
int N;
int a[110];
int f1[110],f2[110];
int res=-1;
int bug=0;//测试身高是否全部相同的标记
memset(f1, 0, sizeof f1);
memset(f2, 0, sizeof f2);
cin>>N;
for(int i=1;i<=N;i++){
cin>>a[i];
if(a[i]==a[i-1]&&i>1)
bug++;
}
if(bug==N-1) {
cout<<N-1;
return 0;
}//排除身高全部相同的情况
for(int i=1;i<=N;i++){
f1[i]=1;//不要忘记初始化
for(int j=1;j<=i;j++){
if(a[j]<a[i]){
f1[i]=max(f1[i],f1[j]+1);
}
}
}//身高递增
for(int i=N;i>=1;i--){
f2[i]=1;//不要忘记初始化
for(int j=N;j>=i;j--){
if(a[j]<a[i]){
f2[i]=max(f2[i],f2[j]+1);
}
}
}//身高递减
for(int i=1;i<=N;i++){
for(int j=i+1;j<=N;j++){
res=max(res,f1[i]+f2[j]);
}
}
cout<<N-res<<endl;
}