DP的全称是Dynamic Programming,叫做动态规划,是解决一个问题的最优解的算法。
DP 在很多领域都有应用,比如计算机科学,经济学,管理学等等。
动态规划问题的一般形式就是求最值。一般的,这类问题都是在给定的约束条件下,从某个状态转移或者做出决策,达到某个最优值。因为要求最值,所以事先必须定义出什么是状态,什么是决策,什么是最优值。
状势转移方程是DP的核心。因为要解决一个问题的最优解,就需要把复杂的问题分解成若干个简单的子问题。用状势转移方程描述子问题和原问题之间的关系,把原问题分解成若干个与原问题形式相同但规模较小的子问题。通过求解子问题的最优解,来求解原问题的最优解。
DP最经典的问题是背包问题。背包问题是指有一个固定容量的背包,若干物品,每个物品有对应的体积和价值。要求在背包容量范围之内,使选择的物品体积总和最大,价值最大。
通过DP算法可以高效的解决许多实际问题,也成为算法学习中的一块重要内容。