hdu1003 Max Sum

来源:互联网 发布:idownload mac 编辑:程序博客网 时间:2024/06/05 01:40

大概题意:含有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;



0 0
原创粉丝点击