码迷,mamicode.com
首页 > 其他好文 > 详细

合唱队形

时间:2016-08-11 14:19:39      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

对于每个数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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!