- 20
- 0
- 约1.36万字
- 约 81页
- 2017-09-01 发布于重庆
- 举报
* * * * * 输入一个长度为n的整数序列(A1,A2,……,An),从中找出一段长度不超过m的连续的子序列,使得这个序列的和最大。 例如:序列 1, -3, 5, 1, -2, 3 当M=2或3时,S=5+1=6 当M=4时,S=5+1-2+3=7 数据范围: 50%的数据N,M=1000 100%的数据N,M=20000 问题15:最大子序和 一个简化的问题 [序列的最大连续和] 输入一个长度为n的整数序列(A1,A2,……,An),从中找出一段连续的子序列,使得这个序列的和最大。 和原问题相比没有M这个序列长度的限制! 设 F(i)表示以第i个数结尾的最大连续和 以第i个数结尾的最大连续和序列,可能存在两种选择: 情形一:只包含Ai 情形二:包含Ai和以Ai-1结尾的最大连续和序列 状态转移方程如下: F(i)=max{Ai , F(i-1)+Ai} 边界:F(1)=A1,Ans=max{F(i)|1=i=n} 该算法的时间复杂度为O(n) 分析 算法一——枚举 设 F(i)为以Ai结尾长度不超过M的最大子序和 对于每个F(i),从1到m枚举k的值,完成Aj的累加和取最大值。 该算法的时间复杂度为O(n3) 简化方程 用一个二叉堆来维护S(i
原创力文档

文档评论(0)