zoukankan      html  css  js  c++  java
  • hdu 1231

    2017-08-06 18:53:21

    writer:pprp

    题目如下:


    给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., 
    Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个, 
    例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 
    为20。 
    在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该 
    子序列的第一个和最后一个元素。 

    Input测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( < 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。 
    Output对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元 
    素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。 
    Sample Input

    6
    -2 11 -4 13 -5 -2
    10
    -10 1 2 3 4 -5 -23 3 7 -21
    6
    5 -8 3 2 5 0
    1
    10
    3
    -1 -5 -2
    3
    -1 0 -2
    0

    Sample Output

    20 11 13
    10 1 4
    10 3 5
    10 10 10
    0 -1 -2
    0 0 0

    算法分析:
      动态规划:找到状态的表示,找到怎么转移,边界条件
    代码如下:
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    int a[10010];
    
    //状态转移:max[i] = max( max[i-1]+a[i], a[i] )
    
    int main()
    {
        int n;
        while(cin >> n && n)
        {
            for(int i = 0 ; i < n ; i++)
            {
                cin >> a[i];
            } 
            
            int i , j = 0;
            
            int s = 0, e = n - 1;
            int tmpsum = 0 ;
            int maxSum = -1;
    
            for(i = 0 ; i < n ; i++)
            {
                tmpsum += a[i];
    
                if(tmpsum > maxSum)
                {
                     s = j;
                     e = i;
                      maxSum = tmpsum;
                }
                else if(tmpsum < 0)
                {
                     j = i + 1;
                     tmpsum = 0;
                }
                
            } 
            if(maxSum < 0)
                maxSum = 0;
            cout << maxSum <<" "<<a[s] << " " << a[e] << endl;
            
           
    
        }
        return 0;
    }
  • 相关阅读:
    ↗☻【精彩绝伦的CSS#BOOK#】
    Adding client to server's list failed, CORBA error: IDL:omg.org/CORBA/COMM_FAILURE:1.0
    hadoop文件输出控制,多路径输出到不同文件
    virtualbox安装CentOS无法上网
    ant如何使用——初学者一篇通
    linux下用户命令
    hadoop启动后进safemode不出来
    hadoop获取context的当前输出路径,
    hadoop输出控制,输出到指定文件中
    python option.parser
  • 原文地址:https://www.cnblogs.com/pprp/p/7295928.html
Copyright © 2011-2022 走看看