动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程最优化的数学方法。他是20世纪20年代初美国数学家R.E.Bellman等人提出的最优化原理,它利用各阶段之间的关系,逐个求解,最终得到全局最优解。在设计动态规划算法是,需要确认原问题与子问题、动态规划状态、边界状态结值、状态转移方程等关键要素。
动态规划的基本特征:待求解的问题是一个求最优解的问题(通常是求最大值或者最小值),而且该问题能够分解成若干个子问题,并且子问题之间还有重叠的更小的子问题,就可以考虑用动态规划来解决这个问题。
在算法面试中,动态规划是最常考察的题型之一,大多数面试官都以是否较好的解决动态规划相关问题来区分候选者是否聪明。