动态规划DP 导言

1,什么是DP

动态规划(Dynamic Programming      简称DP)是一种解决多阶段决策问题的数学优化方法。它通过将复杂问题划分为若干个子问题,并采用递推的方式求解子问题,最终得到原问题的最优解

动态规划的核心思想是利用已经解决过的子问题的解来求解当前问题,以减少计算量。具体而言,动态规划通常包括以下几个步骤:

  1. 定义状态:将原问题划分为若干个子问题,并定义状态表示问题的子解。
  2. 建立状态转移方程:根据子问题之间的关系,建立状态转移方程,描述状态之间的演变关系。
  3. 确定初始状态:确定初始状态的值或者边界条件。
  4. 利用状态转移方程进行递推:根据状态转移方程,从初始状态开始,逐步计算出所有的状态值。
  5. 根据需要得到最优解:根据已经计算得到的状态值,可以得到最优解的具体内容。

动态规划广泛应用于各种问题,例如最短路径问题、背包问题、序列比对等。它的优势在于能够将复杂问题拆分为简单的子问题,并且通过存储已解决的子问题的解来避免重复计算,从而提高运算效率。

2,DP解题步骤

状态转移公式(递推公式)是很重要,但动规不仅仅只有递推公式。

DP五部曲

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

注意的是:一些情况是递推公式决定了dp数组要如何初始化。

dp 也是 记忆化搜索 之一,例如:Fbn 数列,就是记录好我们计算过的子问题,避免多次重复计算。

最后,写的过程中可以  debugv(dp)即 打印一遍 dp数组

查看 dp 数组是否符合自己想要的效果。

你可能感兴趣的:(DP训练,动态规划,算法)