分别按顺序和逆序做两遍LIS,然后枚举中点
#include<iostream>
using namespace std;
int main()
{
int n,l[1003],r[1003];
double num[1003];
int i,j,max;
scanf("%d",&n);
for(i = 0;i < n;i++)
scanf("%lf",&num[i]);
l[0] = 1;
for(i = 1;i < n;i++)
{
for(max = 0,j = 0;j < i;j++)
{
if(num[i] > num[j])
if(max < l[j])
max = l[j];
}
l[i] = max + 1;
}
r[n-1] = 1;
for(i = n-2;i >= 0;i--)
{
for(max = 0,j = n-1;j > i;j--)
{
if(num[i] > num[j])
if(max < r[j])
max = r[j];
}
r[i] = max + 1;
}
max = INT_MIN;
for(i = 0;i < n-1;i++)
for(j = i+1;j < n;j++)
if(l[i] + r[j] > max)
max = l[i] + r[j];
printf("%d\n",n-max);
}