动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等中取得了显著的效果
动态规划是求解决策过程最优化的数学方法。如果一个问题可以分解成若干个子问题,并且子问题之间还有重叠的更小的子问题,就可以考虑用动态规划来解决这个问题。应用动态规划之前要分析能否把大问题分解成小问题,分解后的每个小问题也存在最优解。如果将小问题的最优解组合起来能够得到整个问题的最优解,那么就可以使用动态规划解决问题。
可以应用动态规划求解的问题主要由四个特点:
- 问题是求最优解
- 整体问题的最优解依赖于各个子问题的最优解
- 大问题分解成若干小问题,这些小问题之间还有相互重叠的更小的子问题
- 从上往下分析问题,从下往上求解问题
可以使用动态规划的问题一般都有一些特点可以遵循。如题目的问法一般是三种方式:
- 求最大值/最小值
- 求可不可行
- 求方案总数
如果碰到一个问题,是问这三个问题之一的,就有90%概率是使用动态规划来求解。
重点说明的是,如果一个问题是让求出所有的方案和结果,则肯定不是使用动态规划。