1008: 最大连续子序列(2014年中南大学研究生复试机试题 )

1008: 最大连续子序列

时间限制: 1 Sec  内存限制: 128 MB
提交: 461  解决: 80
[提交] [状态] [讨论版] [命题人:外部导入]

题目描述

给定 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( <100000) ,第 2 行给出 K 个整数,每个整数的范围-10000至10000 ,中间用空格分隔。

输出

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

样例输入

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

样例输出

27 0 7
27 10 19
3 3 3
0 0 0
 1 #include<iostream>
 2 /*本题有多种解法,这里介绍我用的这一种,最大连续子序列,从第一个元素开始,对每个
 3 元素加入子序列进行求和,如果和小于0,就进行更新,并不断更新最大的子序列*/
 4 using namespace std;
 5
 6 int sub[10005];
 7
 8 int main(){
 9     int k,max,start,end,sum,temp;
10     while(cin>>k&&k!=0){
11         bool flag=true;
12         max=0;
13         for(int i=0;i<k;i++){
14             cin>>sub[i];
15             if(sub[i]>=0){
16                 flag=false;
17             }
18         }
19         if(flag){
20             cout<<max<<" "<<0<<" "<<0<<endl;
21             continue;
22         }
23         else{
24             max=sub[0];
25             sum=sub[0];
26             start=0;
27             end=0;
28             temp=0;
29             for(int i=1;i<k;i++){
30                 if(sum<0){
31                     temp=i;
32                     sum=0;
33                 }
34                 sum+=sub[i];
35                 if(sum>max){
36                     max=sum;
37                     start=temp;
38                     end=i;
39                 }
40             }
41         }
42         cout<<max<<" "<<start<<" "<<end<<endl;
43     }
44     return 0;
45 } 

原文地址:https://www.cnblogs.com/tangyimin/p/10547689.html

时间: 2024-08-30 02:17:02

1008: 最大连续子序列(2014年中南大学研究生复试机试题 )的相关文章

1028: 安全路径(2014年中南大学研究生复试机试题 )

1028: 安全路径 时间限制: 1 Sec  内存限制: 128 MB提交: 228  解决: 96[提交][状态][讨论版] 题目描述 卫斯理小说经常提及外星人,比如蓝血人. 在土星星球有很多城市,每个城市之间有一条或多条飞行通道, 但是并不是所有的路都是很安全的,每一条路有一个安全系数 s,s 是在  0  和1 间的实数 (包括 0 , 1) ,一条从 u 到 v 的通道 P 的安全度为 Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 ,现在蓝血人

1027: 逃离迷宫(2018年中南大学研究生复试机试题)

1027: 逃离迷宫 时间限制: 1 Sec  内存限制: 128 MB提交: 611  解决: 130[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 PIPI被困在一个迷宫中了!   给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,PIPI想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,PIPI可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,PIPI不能走到迷宫外面去.令人头痛的是,PIPI是个

1022: 淘金(2017年中南大学研究生复试机试题 )

1022: 淘金 时间限制: 1 Sec  内存限制: 128 MB提交: 205  解决: 75[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 在一片n*m的土地上,每一块1*1的区域里都有一定数量的金子.这一天,你到这里来淘金,然而当地人告诉你,如果你挖了某一区域的金子,上一行,下一行,左边,右边的金子你都不能被允许挖了.那么问题来了:你最多能淘金多少? 输入 对于每组数据,第一行两个数n,m,表示土地的长和宽(1<=n,m<=200) 接下来n行,每行m个数,表示每个区域

1021: 机器人走迷宫(2017年中南大学研究生复试机试题 )

1021: 机器人走迷宫 时间限制: 1 Sec  内存限制: 128 MB提交: 339  解决: 71[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 有一个愚蠢的机器人走进一个w*h的迷宫,迷宫里有空地和陷阱.他想要访问迷宫的每个方格,但是它很笨,只会按照指令的方向走.当机器人不能走的时候,也就是下一步会遇到陷阱.迷宫边界或者访问过的格子,它会向右转90度(顺时针旋转90度,不能访问已经访问过的方格,且在原地只转一次,移动后可获得又一次旋转机会).请问这个机器人最多可以经过多

1023: 巨人排队(2017年中南大学研究生复试机试题 )

1023: 巨人排队 时间限制: 1 Sec  内存限制: 128 MB提交: 185  解决: 58[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 巨人国的小学生放假了,老师要给小朋友们排队了.可是这个老师有强迫症,一定要路队上的小朋友按照身高从高到矮排序(也就是排在前面的不能比后面的矮).小朋友呢也很调皮,一旦老师给他排好队就不愿意动了.这个时候小朋友们一个一个的从教室里出来了,每个小朋友一出来老师就要给小朋友安排好位置.请问老师最少要给小朋友排几条路队呢? 输入 对于每组数

惠民工程(2013中南大学研究生复试[最小生成树])

惠民工程 CSU - 1264 时限: 1000MS   内存: 131072KB   64位IO格式: %lld & %llu 提交 状态 已开启划词翻译 问题描述点击打开链接 市政府"惠民工程"的目标是在全市n个居民点间之架设煤气管道(但不一定有直接的管道相连,只要能间接通过管道可达即可).很显然最多可架设 n(n-1)/2条管道,然而实际上要连通n个居民点只需架设n-1条管道就可以了.现请你编写程序,计算出该惠民工程需要的最低成本. 输入 测试输入包含若干测试用例.每个测

水仙花数(2013中南大学研究生上机复试题)

1261: 水仙花数 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 633 Solved: 222 [Submit][Status][Web Board] 点击打开链接 Description 春天是鲜花灿烂的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:"水仙花数"是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3.现在要求输出所有在m和n范围内的水仙花数. Input 输入数据

华为2014机试题(一)

过几天就要进行华为的机试了,今儿临时抱抱佛脚,在网上找到2014届华为校招的机试题,琢磨了一会儿,贴出来记录下. 首先感谢一下Hackbuteer提供的题目:http://blog.csdn.net/hackbuteer1/article/details/11132567 对于第一题,字符过滤.最简单也是最直接的就是HASH.题目规定了输入序列只能为小写字符'a~z'.因此直接开辟一个大小为26的数组用于记录当前字符是否已经出现即可. 需要注意的问题: 1. hash数组记得初始化 2. pOu

hdu1231 最大连续子序列

最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22849    Accepted Submission(s): 10135 Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j