Tricks 2(杂项)(新的杂 Tricks 写到这里)
-
n 小:1. 搜索,2. 状压。
-
枚举子集(\(3 ^ n\)):\(T = S, T \leftarrow ( T - 1 ) \& S\)。(只枚举 S 的子集。用 二项式定理(?) 证时间复杂度)(暴力枚举子集是 \(4 ^ n\) 的)
-
按 mod 某个东西的值分类。如:简单数学题(wwlw 2024.7.31 的 图论 Day 1 PPT 里的一道题)、数位 DP 中有要求……是某个数的倍数这种限制的题。
-
DP、高斯消元、最短路 联动。DP 无后效性,有 些(?) 图论算法(如最短路)相当于 有后效性的 DP(?) 。可以先考虑 DP,DP 是在 DAG 上的。如果出现了环,分两种情况。一种是 \(f _ i = \sum a _ j f _ j\) 这种东西,可以转换成多元一次方程组,用高斯消元解方程;如:P3232 [HNOI2013] 游走。一种是最优化 DP(min、max 这种),可以转换成最短路,注意能不能用 Dijkstra;如:wwlw 在 2024.8.1 中午下课前讲的最后一道题,在 hdu 上,好像叫 梦中的地牢(我记不太清这道题的名字了)。
-
合适的数据范围 -> 合适的算法。根号分治。
-
涉及二进制 和(?) / 或 涉及 mod,但不是从 \(0\) 开始(比如从 \(1\) 开始)的,可以转成从 \(0\) 开始。
-
树上邻域问题——点分治。
-
位运算 -> 按位 -> 拆位(对每一位分别考虑)。如:CF242E XOR on Segment、P4366 [Code+#4] 最短路。
-
合法的括号序列如何生成?
- AB
- (A)(A 可以是空的)
-
排序后,排前面的对排后面的有贡献这种题,要考虑有没有两个相同的东西,使得后面的对前面的有贡献。如:洛谷上的三维偏序模板(CDQ 分治)。
-
如果没有合适的做法可以考虑随机化(如:P4212 外太空旅行)。
-
有多个(可以是 2 个)小题的题可以把小题一个一个做,也许可以用上一个小题的答案等来做下一个小题,不一定要把多个小题一起做。
-
Tarjan(SCC、 点双(?) 、 边双(?) )和 SAM 一般(?) 都可以当成黑盒来用。
-
判定性问题——考虑哈希。