最大序列和的问题:
如果子序列由一个负数a[i]开头,那么这个子序列的和必然不能是最大的,
因为a[i+1]开头的子序列必然更大,所以,i可以推进到i+1。
推广一下,如果a[i]到a[j]的子序列和是负数,那么包含这个子序列的序列和也不可能是最大的,
因此,把i推进到j+1是没有风险的。
在扫描的过程中,不断的用当前和更新最大和,如果当前和可为后续序列和做贡献,则当前和应该大于等于0;
否则,将当前和置为0.
int MaxSubsequenceSum(const int A[], int N)
{
int thisSum, maxSum, j;
thisSum = maxSum = 0;
for (j = 0; j < N; j++)
{
thisSum += A[j];
if (thisSum > maxSum)
maxSum = thisSum;
else if (thisSum < 0)
thisSum = 0;
}
return maxSum;
}