大概题意:含有N(小等于100000)个整数的序列,整数范围在[-1000,1000]。求连续子序列中数字和最大的一个序列,并输出起始位置(有多个位置,输出最先出现一个)。
解题思路:
d[i]表示到第i个数字时包含数字i的最大序列和
a[i]表示第i个数字
mx表示最大序列和
l表示起点
r表示终点
iL表示计算第i个数字和最大序列时,从左算起到i-1,连续序列和不为负数的第一个数的位置
如:
序列 1 -2 2 -2 -1 3 5
iL 1(自身) 1 3(自身) 3 3 6(自身) 6
首先最大数字和序列:
递推公式:d[i] = a[i] + max(0, d[i-1]);
max(0, d[i-1])意义:如果前一个最大序列小于0的话,加上a[i]会使和变小,所以不要加入
起始位置:
结束位置递推 r = d[i] > mx ? i : r;
开始位置递推 iL = d[i-1] < 0 ? i : iL; l = d[i] > mx ? iL : l;