Loading

2020.5.2 清北学堂

  • 树上 DP

    • 一般就是由子节点向根DP
    • 遇到类似 “对于每一个点...” 考虑换根DP
    • 𝑂(1)O(1) 求 LCALCA预处理 𝑑𝑓𝑛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多可以考虑用贪心的思想来进行优化。

可以用size来优化树上背包时间复杂度。

posted @ 2021-05-02 21:43  hyl天梦  阅读(52)  评论(0编辑  收藏  举报