动态规划 DP beta版

  1. to update,还没有排版,lyd的这个部分还没看完
  2. 适用范围
    a) 很多意想不到的问题可以用动态规划做
    b) usu子问题重叠导致了解题的高效。
    c) 最优解,方案数,甚至可行(bool,usu可以被其它而代替)
  3. 设计:
    a) 时间轴常常构成了阶段。(自然的正确性证明,阶段线性增长)
    b) 把后效性记录下来
    c) 不好列状态方程的时候,适当放缩定义。
    d) 设初值,想好0 or (-)inf
  4. 顺序:
    a) 按阶段划分递推(保证子问题已经得到求解)
    i. 阶段 状态 决策
    b) 记忆化搜索
  5. 设计优化(usu体现在时间复杂度上):
    a) 预处理(数据很小甚至可以O(N^2)),esp倍增
    b) 放缩
    c) 贪心思想强行要求顺序
    d) 关注决策集合,eps最值,降一维。边扫边处理
  6. 空间优化:
    a) 滚动数组
    b) 不要第一维
    c) NOTICE:
    i. 状态之间的循环顺序
    ii. 输出方案时省不略。(usu记录某一个状态是怎么转移而来的,开与状态等大的来源记录数组)
  7. 环形处理
    a) 拆开复制
    b) 两次dp,分类讨论。一次拆开,另一次通过适当赋值和条件设计出强制相连但与环等价的算法

常见模板:

  1. 背包(很多问题都可以转化成背包)
    a) 0/1
    b) 完全(inf物品)
    c) 多重(finite物品)
    i. 二进制拆分 or 单调队列优化 咕
    d) 分组
  2. 区间
  3. 树形(以其为根的子树的信息)
    a) 通常的代码实现
    i. 先init本节点的信息
    ii. 递归,usu回溯时合并信息
    b) 不定根的树形dp:二次扫描 换根
    i. 第一次扫描:任选一个根,对答案树形dp(usu回溯时状态转移)
    ii. 第二次扫描:之前那个根的信息应该已完毕,自上而下统计其他节点的答案
  4. 有后效性(方程为环)(高斯消元)咕

你可能感兴趣的:(动态规划 DP beta版)