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