标签:
对于每个数A[I],UP[I]和DN[I],表示左右侧的最长子序列。本题即可轻松解决。
附上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN=111;
int up[MAXN],dn[MAXN],a[MAXN];
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
for (int i=1;i<=n;i++)
for (int j=1;j<=i;j++)
if (a[j]<a[i]) up[i]=max(up[i],up[j]+1);
for (int i=n;i>=1;i--)
for (int j=i;j<=n;j++)
if (a[i]>a[j]) dn[i]=max(dn[i],dn[j]+1);
int ans=n;
for (int i=1;i<=n;i++)
ans=min(ans,n-up[i]-dn[i]-1);
printf("%d",ans);
}
标签:
原文地址:http://www.cnblogs.com/YkLcy1334/p/5760761.html