首页 > 其他 > 详细

最大子序列和

时间:2014-03-20 18:00:44      阅读:446      评论:0      收藏:0      [点我收藏+]

题目1011:最大连续子序列 时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:3810
解决:1840
题目描述:
    给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。现在增加一个要求,即还需要输出该子序列的第一个和最后一个元素。
输入:
    测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( K< 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。

输出:
    对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。

样例输入:
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样例输出:
20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0来源:
2005年浙江大学计算机及软件工程研究生机试真题

 

 

 

 

bubuko.com,布布扣
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i,j,flag;
 5     int K;
 6     int N[10000];
 7     int sum,max,start,end,temp;
 8     while(scanf("%d",&K)!=EOF && K)
 9     {
10         flag=0;
11       for(i=0;i<K;i++)
12       {
13            scanf("%d",&N[i]);
14            if(N[i]>=0)
15            {
16               flag=1;
17            }
18       }
19       if(flag==0)//如果全是负数的话
20       {
21           printf("%d %d %d\n",0,N[0],N[K-1]);
22       }
23       else
24       {
25           sum=N[0];
26           max=N[0];
27           start=0;
28           end=0;
29           for(i=1;i<K;i++)
30           {
31               if(sum<0)//如果子序列的和小于0
32               {
33                 temp=i;//先保存下当前的新开始的坐标
34                 sum=0;//重新令和为0,进行下面的计算
35               }
36             sum+=N[i];
37             if(sum>max)//只有当和大于前面计算的和的时候 才会变化开始和结束坐标!!!!!
38             {
39               end=i;  //这个时候结束
40               start=temp;//这个时候把保存的开始坐标记下
41               max=sum;//记录最大值
42             } 
43           }
44         printf("%d %d %d\n",max,N[start],N[end]);
45       }
46     }
47     return 0;
48 }
bubuko.com,布布扣

最大子序列和,布布扣,bubuko.com

最大子序列和

原文:http://www.cnblogs.com/chaiqunxing/p/3613193.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!