中国大学MOOC-陈越、何钦铭-数据结构-2015秋 01-复杂度2 Maximum Subsequence Sum (25分)
来源:互联网 发布:mac安装win10精简版 编辑:程序博客网 时间:2024/06/06 11:37
Given a sequence of K integers { N1,N2, ..., NK }. A continuous subsequence is defined to be { Ni,Ni+1, ..., Nj } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.
Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.
Input Specification:
Each input file contains one test case. Each case occupies two lines. The first line contains a positive integerK (≤10000). The second line contains K numbers, separated by a space.
Output Specification:
For each test case, output in one line the largest sum, together with the first and the last numbers of the maximum subsequence. The numbers must be separated by one space, but there must be no extra space at the end of a line. In case that the maximum subsequence is not unique, output the one with the smallest indices i and j (as shown by the sample case). If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.
Sample Input:
10-10 1 2 3 4 -5 -23 3 7 -21
Sample Output:
10 1 4
- 时间限制:200ms
- 内存限制:64MB
- 代码长度限制:16kB
- 判题程序:系统默认
- 作者:陈越
- 单位:浙江大学
大致题意:
此题为 最大子列和 的变式,找出序列中的最大子序列之和,并输出子序列中初始位的数和末位的数
解题思路:
用在线处理的方式,用thisMax储存当前临时序列和,如果大于最大maxSum的值,则更新maxSum的值
如果thisSum的值小于0时,将thisSum的值赋为0,因为thisSum小于0时,再加上一个数肯定比之前还要小
具体解答请看以下代码:
#include <iostream> /* * author:Fayne * time:2015-9-2 21:24:16 *thisSum用于保存临时序列之和,maxSum更新最大序列和 *left, right分别表示最大序列的左右序号,tempLeft保存临时左端的序号 */ using namespace std;int A[10010];int main(){int k, i;cin >> k;for ( i=0; i<k; i++ )cin >> A[i];int left = 0, right = k-1, maxSum = -1, thisSum = 0, tempLeft;//maxSum赋初值为-1为了解决出现全部序列为负的情况 for ( i=0; i<k; i++ ){thisSum += A[i];if ( thisSum > maxSum )//如果临时序列和大于最大和,则更新最大和 {maxSum = thisSum;left = tempLeft;//将临时左端的序号赋值给左端序号 right = i;}else if ( thisSum < 0 )//thisSum小于0时,从此刻下一个开始重新求和 {thisSum = 0;tempLeft = i+1;//把此刻的下一序号赋值给临时左端序号 }}if ( maxSum < 0 )//maxSum < 0 说明整个序列全为负数,根据题意,最大和应该为0 maxSum = 0;cout << maxSum << " " << A[left]<< " " << A[right]<< endl;return 0;}
注意题意:If all theK numbers are negative, then its maximum sum is defined to be 0
- 中国大学MOOC-陈越、何钦铭-数据结构-2015秋 01-复杂度2 Maximum Subsequence Sum (25分)
- 中国大学MOOC-陈越、何钦铭-数据结构 Maximum Subsequence Sum
- [MOOC-陈越何钦铭数据结构]01-2. Maximum Subsequence Sum (25)
- 中国大学MOOC-陈越、何钦铭-数据结构-2015秋 03-树3 Tree Traversals Again (25分)
- PTA 数据结构 01-复杂度2 Maximum Subsequence Sum (25分)
- MOOC :01-复杂度2 Maximum Subsequence Sum
- PAT数据结构_01-复杂度2 Maximum Subsequence Sum (25分)
- 中国大学MOOC-陈越、何钦铭-数据结构-2016秋2题
- 中国大学MOOC-陈越、何钦铭-数据结构 List Leaves
- 中国大学MOOC-陈越、何钦铭-数据结构 File Transfer
- 中国大学MOOC-陈越、何钦铭-数据结构 统计工龄
- 中国大学MOOC-陈越、何钦铭-数据结构-2017春
- 中国大学MOOC-陈越、何钦铭-数据结构-2017秋 03-树2 List Leaves(25 point(s))
- [数据结构]01-复杂度2 Maximum Subsequence Sum
- pta 01-复杂度2 Maximum Subsequence Sum (25分)
- 01-复杂度2 Maximum Subsequence Sum (25分)
- 01-复杂度2 Maximum Subsequence Sum (25分)
- 01-复杂度2 Maximum Subsequence Sum (25分)
- Java学习之Iterator(迭代器)的一般用法 (转)
- 安装CentOS7并修复win7引导
- CSU_1101_报数游戏
- 黑马程序员—IO操作(1)
- HDU 4777 Rabbit Kingdom(树状数组+离线处理+尺取法)
- 中国大学MOOC-陈越、何钦铭-数据结构-2015秋 01-复杂度2 Maximum Subsequence Sum (25分)
- android开发游记:android studio工程 转换为 eclipse工程
- BZOJ 1258([CQOI2007]三角形tri-模拟)
- c# OLEDB读取Excel
- 黑马程序员—IO文件操作(2)
- QQ聊天界面以及弹出图片(PopupWindow)
- 野鸟装备IOS版开发笔记(1.0版本)
- C++内存管理
- 【c++学习笔记】指针