Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1574988
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2010-06-18 11:04:46

  这道题和以前NOI的一道名叫“合唱队形”的题目很相似,题目大意是给出一队士兵,要从中选一些人出来,使剩下的队列满足
a1 < a2 < a3 ... < a(i ) <=> a(i+1) > a(i+2) > .. a(n-1) > a(n)
       这个队形,理想情况下,就是中间高,两边低。不过,题目的描述十分诡异,它是说“任何一个士兵向左或向右望去,能够望到无穷远”,这样的描述害死很多人。当然,题目要求选出来的人数尽量少。
#include
#include
#include
#include
#include
#include
using namespace std;
#define N 1001
double a[N];
int l[N] , r[N];
int main()
{
 int i,n,j,max = 0;
 cin>>n;
 for( i =0 ;i  cin>>a[i];
 memset(l,0,sizeof(l));
 memset(r,0,sizeof(r));
 
 l[0] =1;
 for( i =1 ; i {
   l[i] =1;
   for(j = 0 ; j   if(a[j]=l[i])
    l[i] = l[j] + 1;
 }
 r[n-1] =1;
 for(i = n-2; i>=0;i--)
 {
   r[i] = 1;
   for( j =n-1;j>i;j--)
    if(a[i] > a[j] && r[i] <= r[j])
      r[i] = r[j] +1;
 }
 for(i=0;i for(j=i+1;j  if(l[i] + r[j] >max)
  {
    max = l[i] + r[j];
  }
 cout< return 0;
}
阅读(679) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~