最大连续子序列

1. 简介

  • 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。--百度百科

2. 解决的问题

  • 最优性原理是动态规划的基础。任何一个问题,如果失去了这个最优性原理的支持,就不可能用动态规划设计求解。
    动态规划是解决最优解的问题,需要满足两个条件。
  1. 问题中的状态满足最优性原理。
  2. 问题中的状态必须满足无后效性。
    • 所谓无后效性是指:“下一时刻的状态只与当前状态有关,而和当前状态之前的状态无关,当前状态是对以往决策的总结”。

3. 动态规划的关键

- 递归方程 + 边界条件

4. 示例

# 最大连续子序列
nums = [1, 2, -3, -6, 4, 5, 7]


def maxsum(nums):
    if len(nums) == 1:
        return nums[0]

    dp = res = nums[0]

    for i in range(1, len(nums)):
        dp = max(nums[i], dp + nums[i])
        res = max(dp, res)
    return res


res = maxsum(nums)
print(res)
posted @ 2019-10-09 17:31  RunningForever  阅读(220)  评论(0编辑  收藏  举报