• 09G:登山


    总时间限制: 
    5000ms
     
    内存限制: 
    131072kB
    描述

    五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?

    输入
    Line 1: N (2 <= N <= 1000) 景点数
    Line 2: N个整数,每个景点的海拔
    输出
    最多能浏览的景点数
    样例输入
    8
    186 186 150 200 160 130 197 220
    样例输出
    4
    来源
    第六届北京大学程序设计大赛暨ACM/ICPC选拔赛
     1 #include<iostream>
     2 #include<cstring> 
     3 using namespace std;
     4 int pre[1005]; //i结尾的最长上升 
     5 int after[1005]; //i开始的最长下降 
     6 int a[1005]; //高度 
     7 int main(){
     8     int n;
     9     cin>>n;
    10     int i, j;
    11     for(i = 0; i < n; i++)
    12         cin>>a[i];
    13     for(i = 0; i < n; i++){
    14         for(j = 0; j < i; j++){
    15             if(a[j]<a[i]) pre[i] = max(pre[j]+1, pre[i]);
    16         }
    17         pre[i] = max(pre[i], 1);
    18     } 
    19     for(i = n-1; i >= 0; i--){
    20         for(j = i+1; j < n; j++){
    21             if(a[j]<a[i]) after[i] = max(after[j]+1, after[i]);
    22         }
    23         after[i] = max(after[i], 1);
    24     } 
    25     int ans = 0;
    26     for(i = 0; i < n; i++)
    27         ans = max(ans, pre[i]+after[i]);
    28     cout<<ans-1<<endl;
    29     return 0;
    30 }

    就是要提醒一下,pre和after要注意初始化,即要么最开始初始化为1,要不然处理之后发现是0的话改成1

  • 相关阅读:
    VM 下增加磁盘空间
    在APACHE服务器上的访问方式上去除index.php
    1
    数组累加兼eval性能测试
    webstorm软件使用记录
    gulp配置安装使用
    jQuery方法笔记
    搭建Grunt集成环境开发SASS
    msysgit使用方法
    十诫在天主教和新教之间的差别
  • 原文地址:https://www.cnblogs.com/fangziyuan/p/13098425.html
Copyright © 2020-2023  润新知