#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
- 爷没听懂 QwQ ,再学学这篇博客 -> [入门向选讲] 插头DP:从零概念到入门