一、问题分析

如果采用暴力解决,即考虑子段的情况总数为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] }。

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

 

二、程序设计

动态规划之最大子段和

 

三、程序结果

动态规划之最大子段和

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

动态规划之最大子段和

相关文章:

  • 2022-12-23
  • 2021-07-20
  • 2022-12-23
  • 2021-12-27
  • 2022-12-23
  • 2022-12-23
  • 2022-01-16
猜你喜欢
  • 2021-12-05
  • 2021-11-08
  • 2021-10-16
  • 2022-02-10
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案