#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int>v(n); //动态规划先遍历所有的状态
vector<int>dp1(n,0);
for(int i=0;i<n;i++)
{
cin>>v[i];
}
for(int i=0;i<n;i++)
{
dp1[i]=1; //动态规划先遍历所有的状态 ,首先它自己本身可以构成一个下降子序列
for(int j=0;j<i;j++) //遍历左边的每一个位置
{
if(v[i]>v[j]) //代表v[j】可以在v[i]左侧
{
dp1[i]=max(dp1[i],dp1[j]+1); ///这句话表示dp1[i]左侧要么是j要么不是j.如果不是j则是dp1[i],如果是j,那么他左侧放了j,则左边最长序列是dp1[j]+1;
}
}
}
vector<int>dp2(n,0);
for(int i=n-1;i>=0;i--)
{
dp2[i]=1;
for(int j=n-1;j>=i;j--)
{
if(v[i]>v[j])
{
dp2[i]=max(dp2[i],dp2[j]+1);
}
}
}
int maxLength=0;
for(int i=0;i<n;i++)
{
if(maxLength<dp1[i]+dp2[i]-1)
{
maxLength=dp1[i]+dp2[i]-1;
}
}
cout<<n-maxLength<<endl;
}
HJ24合唱团
最新推荐文章于 2024-08-31 22:41:09 发布