#P1135. 最大连续子序列
最大连续子序列
问题描述
给定 个整数的序列 ,其任意连续子序列可表示为 ,其中 。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列 ,其最大连续子序列为 ,最大和为 。现在增加一个要求,即还需要输出该子序列的第一个和最后一个元素。
输入格式
测试输入包含若干测试用例,每个测试用例占 行,第 行给出正整数 (),第 行给出 个整数,中间用空格分隔,每个数的绝对值不超过 。当 为 时,输入结束,该用例不被处理。
输出格式
对每个测试用例,在 行里输出最大和、最大连续子序列的第一个和最后一个元素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号 和 最小的那个(如输入样例的第 、 组)。若所有 个元素都是负数,则定义其最大和为 ,输出整个序列的首尾元素。
样例输入
样例输出
提示
这是一道稍微有点难度的动态规划题。
首先可以想到的做法是枚举每个区间的和,预处理 来表示区间 的和之后通过减法我们可以 时间获得区间 的和,因此这个做法的时间复杂度为 。
然后这题的数据范围较大,因此还需作进一步优化才可以 AC。记第 个元素为 ,定义 表示以下标 结尾的区间的最大和,那么 的计算有 种选择,一种是含有 ,一种是不含有 ,前者的最大值为 ,后者的最大值为 。而两者取舍的区别在于 是否大于 。