求整个序列的最大子段和, 那么最大子段和一定是一个段,从整个序列入手设计动态规划的确没啥思路,得马上跳越思路到其他的方向。
最大子段一定是从某个i开始的一个段,所以b[i]=max(a[i],a[i]+b[i+1]);
意思是: 从i开始往右的最大子段 。 如果b[i+1]即从i+1开始的最大子段和是正的,那么b[i]=a[i]+b[i+1],如果b[i+1]最大是负的,那么b[i]就是a[i]了,不是a[i]+b[i+1]了,因为一个数加上一个负数一定比本身还小的。。。 最终我们求得是max( b[i]) ,即从每个位置i开始的最大段长度中的最大值。
接下来会写一个拓展应用,矩阵的最大子矩阵和, 是在此基础上的变化。