题目:https://www.vijos.org/p/1098
思路:
先递增后递减,可以一个反向LIS接一个LIS,序列长度初始化为1啊!!!错了半天。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int a[105],l[105],r[105];
int main() {
int n,ll,rr,ans=0;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++){
fill(l,l+n,1);fill(r,r+n,1);
ll=1,rr=1; //序列长度最小肯定是1,这tm也写错!
for(int j=1;j<=i;j++){
for(int k=0;k<j;k++)
if(a[k]<a[j])
l[j]=max(l[k]+1,l[j]);
ll=max(ll,l[j]);
}
for(int j=i+1;j<n;j++){
for(int k=i;k<j;k++)
if(a[k]>a[j])
r[j]=max(r[k]+1,r[j]);
rr=max(rr,r[j]);
}
//cout<<ll<<" "<<rr<<endl;
int tmp=ll+rr-1;
ans=max(ans,tmp);
}
cout<<n-ans<<endl;
return 0;
}