题目链接:http://poj.org/problem?id=1836
【分析】
两次LIS,中间允许相等。可以nlogn但我懒得写了。
【代码】
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=1010;
const double eps=1e-8;
double h[maxn];
int fl[maxn],fr[maxn];
int n,ans;
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%lf",&h[i]);
for (int i=1;i<=n;i++)
for (int j=0;j<i;j++) if (h[j]+eps<h[i]) fl[i]=max(fl[i],fl[j]+1);
for (int i=n;i>=1;i--)
for (int j=n+1;j>i;j--) if (h[j]+eps<h[i]) fr[i]=max(fr[i],fr[j]+1);
for (int i=1;i<=n;i++)
for (int j=i;j<=n;j++) if (fabs(h[i]-h[j])<eps) ans=max(ans,fl[i]+fr[j]-(i==j));
printf("%d\n",n-ans);
return 0;
}