核心思想

动态规划基础,解决一旦有了尝试方法,怎么搞定后续的一整套实现

讲解:一维、二维、三维动态规划,从递归开始到最终版本,包括空间压缩技巧

高频动态规划问题:子数组累加和问题与扩展 最长递增子序列问题与扩展

动态规划常见模型 & 尝试经验,核心在于怎么尝试?思路、经验太多了,如下都是经典尝试

背包dp 区间dp 树型dp

状压dp 数位dp

动态规划常见技巧

优化枚举 ,获得具体方案 ,根据数据量猜解法

动态规划

一些递归有重复计算,可以用空间记录返回值来避免重复计算

同时还有相关的一整套原理和技巧的总和

什么样的递归可以变成动态规划?

设计的可变参数类型简单,不比int类型更复杂的递归,可以变成动态规划

如果递归过程中的路径信息比较复杂(回溯),那么不能或者没有必要改成动态规划

虽然有路径信息,但是路径信息比较简单的话,也可以改成动态规划

重叠子结构:递归计算的逻辑是一样的

最优子问题:大问题依靠小问题的最优而来或者组合而来

无后效性:设计的可变参数简单

动态规划的大致过程

1、想出设计优良的递归尝试

2、记忆化搜索 (从顶到底的动态规划)

3、严格位置依赖的动态规划 (从底到顶的动态规划)

4、进一步优化空间,也就是空间压缩

5、进一步优化枚举行为

尝试策略 = 转移方程

推荐从尝试入手,最符合自然智慧

进而分析位置依赖,分析位置依赖时多根据具体的例子画图,建立空间感

动态规划方法的复杂度:O (状态数量 * 每个状态的枚举代价)

尝试方法的优劣由题目具体的数据量决定,先确定靠谱尝试,然后再去做后续实现

参考资料