Maximum Continuous Subsequence Sum - 最大连续子序列和


问题

序列的连续子序列是原序列的子集,元素在原序列中是连续的。例如的连续子序列有

所有子序列的各个元素之和中最大的是(显然负数会使子序列之和减小)。

求序列的最大连续子序列的和。

解法

设序列长度为(数组从开始,范围)。设的最大连续子序列的和,则有状态转移方程:

初始化之间的连续子序列和为

对于元素,若前个元素之和,则之前部分的子序列和会使最终的和变小(因为是负值),所以直接抛弃之前的所有序列,把作为子序列的起始,则当前最大子序列和为

对于元素,若前个元素之和,则之前部分的子序列和会使最终的和变大(因为是正值),所以在之前的子序列和基础上继续累加,则当前最大子序列和为

即为序列的最大连续子序列和。该算法的时间复杂度为


源码

MaximumContinuousSubsequenceSum.h

MaximumContinuousSubsequenceSum.cpp

测试

MaximumContinuousSubsequenceSumTest.cpp