zoukankan      html  css  js  c++  java
  • hdoj--1231--最大连续子序列

    最大连续子序列

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 23664    Accepted Submission(s): 10582


    Problem Description
    给定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
    /*这道题有点动态规划的意思,总的思路就是:从第一位开始无脑加,然后每加一位就要判断
    和是否小于0,如果小于零就改变起点和终点*/
    #include<stdio.h>
     int main()
     {
         int n,i,j,max,k,end;
         int m,start,ee;
         int s[12000];
         while(scanf("%d",&n),n)
         {
             for(i=0;i<n;i++)
             scanf("%d",&s[i]); 
             max=m=start=ee=k=s[0];//将第一个数加进去,所以下一步从第一位开始 
             for(i=1;i<n;i++)
             {
                 if(m+s[i]<s[i]) 
                 {
                     m=end=k=s[i];//k来表示起点 
                 }
                 else
                 {
                     m+=s[i];
                     end=s[i];//通过end每次的移动来记录终点,确定区间 
                 }
                 if(m>max)
                 {
                     max=m;
                     start=k;//start 和ee来记录,最后输出 
                     ee=end;
                 }
             }
             if(max<0)//如果max<0,就表示整个数组中没有大于等于0的数 
            	printf("0 %d %d
    ",s[0],s[n-1]);
             else
             	printf("%d %d %d
    ",max,start,ee);
         }
         return 0;
     }

     

  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273800.html
Copyright © 2011-2022 走看看