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

InputLine 1: N (2 <= N <= 1000) 景点数 
Line 2: N个整数,每个景点的海拔Output最多能浏览的景点数Sample Input

  1. 8
  2. 186 186 150 200 160 130 197 220

Sample Output

  1. 4
  2.  
  3. 代码:
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. #include<stack>
  7. #include<set>
  8. #include<map>
  9. #include<vector>
  10. #include<cmath>
  11. const int maxn=1e4+;
  12. typedef long long ll;
  13. using namespace std;
  14. int a[maxn];
  15. int dp1[maxn],dp2[maxn];
  16. int main()
  17. {
  18. int n;
  19.  
  20. cin>>n;
  21. for(int t=;t<=n;t++)
  22. {
  23. scanf("%d",&a[t]);
  24. }
  25. for(int t=;t<=n;t++)
  26. {
  27. dp1[t]=;
  28. dp2[t]=;
  29. }
  30. for(int t=;t<=n;t++)
  31. {
  32. for(int j=;j<t;j++)
  33. {
  34. if(a[t]>a[j])
  35. dp1[t]=max(dp1[t],dp1[j]+);
  36. }
  37. }
  38. for(int t=n;t>;t--)
  39. {
  40. for(int j=n;j>t;j--)
  41. {
  42. if(a[t]>a[j])
  43. dp2[t]=max(dp2[t],dp2[j]+);
  44. }
  45. }
  46. int ans=-;
  47. for(int t=;t<=n;t++)
  48. {
  49. ans=max(dp1[t]+dp2[t]-,ans);
  50. }
  51. cout<<ans<<endl;
  52. return ;
  53. }
  54.  
  55. //java
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4.  
  5. public static void main(String[] args) {
  6. // TODO 自动生成的方法存根
  7.  
  8. int[] a= new int[];
  9. int[] b= new int[];
  10. int[] dp1=new int[];
  11. int[] dp2=new int[];
  12. Scanner sc=new Scanner(System.in);
  13. int N=sc.nextInt();
  14. for(int t=;t<=N;t++)
  15. {
  16. a[t]=sc.nextInt();
  17. }
  18. for(int t=;t<=N;t++)
  19. {
  20. b[N-t+]=a[t];
  21. }
  22. for(int t=;t<=N;t++)
  23. {
  24. dp1[t]=;
  25. dp2[t]=;
  26. }
  27. for(int t=;t<=N;t++)
  28. {
  29. for(int j=;j<t;j++)
  30. {
  31. if(a[t]>a[j])
  32. {
  33. dp1[t]=max(dp1[t],dp1[j]+);
  34. }
  35. }
  36. }
  37. for(int t=;t<=N;t++)
  38. {
  39.  
  40. for(int j=;j<t;j++)
  41. {
  42. if(b[t]>b[j])
  43. {
  44. dp2[t]=max(dp2[t],dp2[j]+);
  45. }
  46. }
  47. }
  48. int ans=;
  49. for(int t=;t<=N;t++)
  50. {
  51. ans=max(dp1[t]+dp2[N-t+]-,ans);
  52.  
  53. }
  54. System.out.println(ans);
  55. sc.close();
  56.  
  57. }
  58.  
  59. private static int max(int i, int j) {
  60. // TODO 自动生成的方法存根
  61. if(i>j)
  62. return i;
  63. else
  64. return j;
  65. }
  66.  
  67. }
  1.  
  1.  

OpenJ_Bailian - 2995-登山(两遍最长上升子序列+枚举顶点)的更多相关文章

  1. hdu 4681 最长公共子序列+枚举

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 #include<cstdio> #include<cstring> # ...

  2. HDU 3998 Sequence (最长上升子序列+最大流)

    参考链接:http://www.cnblogs.com/gentleh/archive/2013/03/30/2989958.html 题意:求一个序列的最长上升子序列,及其个数(注意:两个最长上升子 ...

  3. BZOJ 2423 最长公共子序列

    Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...

  4. Leetcode 673.最长递增子序列的个数

    最长递增子序列的个数 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[ ...

  5. [BZOJ2423][HAOI2010]最长公共子序列

    [BZOJ2423][HAOI2010]最长公共子序列 试题描述 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x ...

  6. NOIP200407合唱队形+最长上升子序列O(n^2)详解

    合唱队形解题报告 2016-05-12   4:30——6:45 NOIP200407合唱队形 难度级别:A: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:20000 ...

  7. bzoj:2423: [HAOI2010]最长公共子序列

    Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...

  8. [Swift]LeetCode673. 最长递增子序列的个数 | Number of Longest Increasing Subsequence

    Given an unsorted array of integers, find the number of longest increasing subsequence. Example 1: I ...

  9. codevs 1862 最长公共子序列(求最长公共子序列长度并统计最长公共子序列的个数)

    题目描述 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y ...

随机推荐

  1. 用Spark进行实时流计算

    Spark Streaming VS Structured Streaming Spark Streaming是Spark最初的流处理框架,使用了微批的形式来进行流处理. 提供了基于RDDs的Dstr ...

  2. 每日一道 LeetCode (6):有效的括号

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  3. 用var声明变量,在java中居然有这么多细节,你都了解么?

    简介 Java SE 10引入了局部变量的类型推断.早先,所有的局部变量声明都要在左侧声明明确类型. 使用类型推断,一些显式类型可以替换为具有初始化值的局部变量保留类型var,这种作为局部变量类型 的 ...

  4. Android Studio--家庭记账本(六)

    (Android studio家庭记账本源码已上传至github,https://github.com/xhj1074376195/CostBook_app) 今天记账本终于可以算是完成了,实现了账户 ...

  5. 用 Python 写出这样的进度条,刷新了我对进度条的认知

    ❞ 1 简介 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给 ...

  6. 06 大数据CentOS6.5mini安装与网络配置

    1. CentOS6.5mini安装 文件>>新建虚拟机 选择自定义,下一步 默认,下一步 选择稍后安装操作系统,下一步 选择CentOS版本,下一步 给虚拟机命名,这个是在VMWare中 ...

  7. C# 委托 应用实例

    用一句话解释委托:委托是一种可以把引用存储为函数的类型. 有些类似Spring框架对于接口的用法,向Action中注入Service对象.Action并不知道调用哪个服务层,只有容器通过配置文件 向A ...

  8. Css 设置超过再两行显示省略号

    大部分场景都是超过一行就显示... <template> <div class="other-product-item item-name" :title=&qu ...

  9. effectivejava(破坏单例)

    以下代码是最普通的双重锁的单例实现形式 package com.edu.character02; import java.io.Serializable; /** * <p> * 双重锁 ...

  10. Python多进程队列间传递对象

    前言 在python 需要在队列中传递对象, 会出现进程不能正常退出的情况. 其原因是因为 在父进程 向子进程传入的Queue对象不对, Queue对象正常是子进程之间的信息传递, 而当我在父进程 创 ...