题目链接
解题方法:动态规划
题目分析
题目大意
给定序列,问该序列中最大连续子序列的和,以及该子序列的首尾两个数的值。
解析
动态规划,开一个数组dp[]记录到每一个点的最大值,全部赋值为-1,再开一个数组b[]记录到该点最大值所对应的连续子序列的首元素下标。扫一遍序列,对于下标i的元素,如果dp[i-1]>=0,则b[i]=b[i-1](在同一个最大子序列中),并且dp[i]=dp[i-1]+a[i],否则从当前元素开始,新建一个子序列,即b[i]=i,dp[i]=a[i]。这样建立完成dp[]及b[],找最大的dp[i],即到i有最大连续子段和,起点下标为b[i],终点下标为i。如果最大值为负数,则没有正数解,输出0 a[1] a[n]。
代码
1 |
|