动态规划初步
动态规划的核心是状态和状态转移方程。
计算状态转移方程的方法:
1、递归计算。
用直接递归的方法计算状态转移方程,效率往往十分低下。其原因是相同的子问题被重复计算了多次。
2、递推计算。
递推的关键是边界和计算顺序。
3、记忆化搜索。
不必事先确定各状态的计算顺序,但需要记录每个状态“是否已经计算过”。
动态规划基础:DAG上的动态规划
1、矩阵嵌套。(看清题意,是<,不是<=)
2、硬币问题。
多阶段决策问题
DAG看成多阶段决策问题就是,每走一步对应一个阶段,这一步可以选择那几条路径对应几个决策。
多阶段决策的最优化问题往往可以用动态规划解决,状态及状态转移类似于解答树,阶段就是解答树中的层数,几个决策对应几个分支。
1、多段图的最短路。
2、0-1背包问题。
更多经典模型
1、线性结构上的动态规划。
1>最长上升子序列问题。
2>最长公共子序列问题。
2、树上的动态规划。
1>树的最大独立集。
2>树的重心。
3>树的最长路径。
3、复杂状态的动态规划。
1>最优配对问题。
2>货郎担问题。
3>图的色数。