hdu1003 Max Sum

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值