子序列和最大的问题
摘要:
给定一个序列a1,a2,...,an,求子序列中和最大的那个。如果使用暴力算法,需要使用O(n2)的时间复杂度。使用动态规划可以将时间复杂度下降到O(n),具体方法如下:定义bi为以ai结尾的所有序列中最大值,显然max{b1,b2,b3,...,bn}就是子序列和的最大值,bi满足关系式b1=a1bi=max{bi-1+ai, ai}通过这个关系式,可以在O(n)的时间内把所有bi求出来,然后求最大值就可以了。注意到bi只有在求bi+1以及求最大值的时候才用到,我们也可以把这两个过程合并起来。维护一个当前子序列和最大值,如果bi比最大值还大,则更新最大值,这样数组bi实际上也不需要了。 阅读全文
posted @ 2012-10-17 18:07 mathlover 阅读(278) 评论(0) 推荐(0) 编辑