zoukankan      html  css  js  c++  java
  • 上升子序列(SDUT2171)

    上升子序列

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

      一个只包含非负整数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列{a1, a2, ...,aN},我们可以得到一些上升的子序列{ai1, ai2, ..., aiK},这里1 ≤ i1 < i2 <...< iK ≤ N。例如:对于序列{1, 7, 3, 5, 9, 4, 8},有它的一些上升子序列,如{1, 7}, {3, 4, 8}等等。这些子序列中序列和最大的是子序列{1, 3, 5, 9},它的所有元素的和为18。
            对于给定的一个序列,求出它的最大上升子序列的和。
       注意:最长的上升子序列的和不一定是最大的哦。

    输入

    输入包含多组测试数据,对于每组测试数据:
    输入数据的第一行为序列的长度 n(1 ≤ n ≤ 1000),
    第二行为n个非负整数 b1,b2,...,bn(0 ≤ bi ≤ 1000)。

    输出

    对于每组测试数据,输出其最大上升子序列的和。

    示例输入

    7
    1 7 3 5 9 4 8

    示例输出

    18
     1 #include<stdio.h>
     2 #include<string.h>
     3 const int MAXN = 1000 ;
     4 int b[MAXN+10] ;
     5 int c[MAXN+10] ;//存储和
     6 int main()
     7 {
     8     int n,m,i,j ;
     9     while(~scanf("%d",&n) ){
    10     for(i = 1 ; i <= n ; i++)
    11     {
    12         scanf("%d",&b[i]) ;
    13     }
    14     int key = 0 ;
    15     for(i = 1 ; i <= n ; i++)
    16     {
    17         m = 0 ;
    18         for(j = 1 ; j < i ; j++)
    19         {
    20             if(b[i] > b[j])
    21             {
    22                     if(m < c[j])
    23                     m = c[j] ;
    24             }
    25         }
    26         c[i] = m + b[i] ;
    27         if(c[i] > key)
    28             key = c[i] ;
    29 
    30     }
    31     printf("%d\n",key) ;
    32     }
    33     return 0 ;
    34 }
    View Code

    要注意第一个for循环从头开始

  • 相关阅读:
    TreeSet集合的add()方法的源码解析
    Ubuntu下定时任务和自启动任务的部署
    基于Django的独立运行脚本开发
    python做量化交易干货分享
    使用Glide以及OkHttp集成
    Redis实现简单消息队列
    Linux下高并发socket最大连接数
    Ubuntu14.04部署pyspider的过程
    pymongo "ServerSelectionTimeoutError: No servers found yet" 错误的解决
    gitolite服务器部署中的一些坑
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3111152.html
Copyright © 2011-2022 走看看