[集训整理]QBXT - DP - DAY2

#1.0 部分重点整理

可以在 DP 的同时考虑贪心。

  • 树上 DP

    • 一般就是由子节点向根DP
    • 遇到类似 “对于每一个点...” 考虑换根DP
    • \(O(1)\)\(\text{LCA}\)
      • 预处理 \(dfn\)(进入退出各记录一次),采用 ST 表查询区间最小值。
    • 基环树 DP
      • 单独考虑环
      • 断环为链
    • 树上背包
      • 泛化物品 - 合并
  • 状压DP

    • “从集合的角度看待 DP”。 我们设计的状态就是一个个无交集的集合,我们要做到的就是设 计出集合之后,能够想到集合之间元素的联系。那么,碰到一道 题目,我们就思考:我们要设计一个什么样的状态集合才能够把 我们要的东西给分好类,即分成若干个集合,而我们分完之后又 要怎么样进行集合之间的转移。

    • 常见位运算

      • __builtin_ffs(x):返回 x 的最后一位 1 的是从后向前第 几位,比如 7368(110011001000) 返回 4。
      • __builtin_clz(x):返回前导的 0 的个数。
      • __builtin_ctz(x):返回后缀 0 的个数。
      • __builtin_popcount(x):返回 x 中 1 的个数。
      • __builtin_parity(x):返回 x 中 1 个数的奇偶性。
    • 状压的目的:消除后效性,需要记录足够多的信息.

    • 考虑组合意义简化题目

  • 插头 DP

posted @ 2021-05-02 20:16  Dfkuaid  阅读(51)  评论(1编辑  收藏  举报