zoukankan      html  css  js  c++  java
  • 最大连续子序列

    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)
    
  • 相关阅读:
    Ping
    boost::python开发环境搭建
    mingw和libcurl
    ssh远程执行命令使用明文密码
    netty源码阅读之UnpooledByteBufAllocator
    Direct ByteBuffer学习
    clions的使用
    netty中的PlatformDependent
    STL之priority_queue(优先队列)
    c++线程调用python
  • 原文地址:https://www.cnblogs.com/henryw/p/11598803.html
Copyright © 2011-2022 走看看