动态规划之最大子段和

一、问题分析

如果采用暴力解决,即考虑子段的情况总数为1+2+...+n=O(n^2)。考虑动态规划算法,可以实现O(n)算法复杂度。

 

动态规划思想:

可以将一个大问题(N个元素数组)转化为一个较小的问题(N-1个元素的数组)。假设已经知道(A[1], ...,A[n-1])中和最大的一段数组之和为All[1],并且已经知道

 

(A[1],...,A[n-1])中包含A[1]的和最大的一段数组为Start[1]。那么不难看出 (A[0], ..., A[n-1])中问题的解All[0] = max{ A[0], A[0] + start[1], All[1] }。

这是从后向前的理解方式,也可以从前往后理解,即下面的程序:

 

二、程序设计

 

三、程序结果

如果序列全是负数的话,其实就是在选择最大值

posted @ 2015-05-03 19:16  cxm_hy  阅读(2272)  评论(0编辑  收藏  举报