动态规划总结


动态规划算法

动态规划算法,就是挖掘问题的条件,找到问题中各个状态的联系,通过列出状态转移方程,实现各个状态的计算。

动态规划解题思路

动态规划解题的核心是找到状态转移方程,如何表示状态,如何求解状态就是DP问题的难点。下面给出动态规划解题的一般思路:

集合的强调

这个思路特地强调了集合这个概念,与传统的DP思路略有不同,一些问题求解时可能不需要强调集合这个概念,就可以顺利得到状态转移方程,但有一些较为复杂的问题如果从集合的角度来思考,就更容易进行状态的划分与计算。

状态划分的技巧

经验上讲,我们通常对达成状态的最后一步进行划分。

DP的难点

上面,我们基于经验总结了DP问题的一般解决思路,但实际上都不会如此顺利,可能存在以下问题:

  • 无法找到合适的状态表示方法
  • 当前状态表示的方法无法进行有效的状态划分,无法计算

所以DP问题非常灵活,不存在模板,只能不断积累经验,碰到以上问题可以尝试着迁移其它问题的状态表示和状态划分方法。

动态规划的类型

动态规划总结起来共以下几种类型:

  • 线性DP
  • 区间DP
  • 计数类DP
  • 数位统计DP
  • 状态压缩DP
  • 树形DP

每类问题的处理存在一些共性,但笼统的总结其特点没有意义,Blog中对这些类型的题目均有记录,时常翻看才能提高对DP的掌握。

动态规划的实现

动态规划算法有两种实现:

  • 循环实现各种状态的计算
  • 记忆化搜索,递归的实现状态的计算

前者实现的速度一般略快于后者,但有时采用后者可以更加清晰简洁的实现算法,应该结合具体问题,选择合适的实现方式。


文章作者: Kong Aobo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kong Aobo !
  目录