私は灰の魔女イレーナです

既然多头说记录技巧比较重要,那就写个记录吧,希望至少能提升点啥。

\(DP\),如果题目要求的是求一个问题的最优解(如:完成一个任务 XXX 的最大/最小代价),设计状态时可以考虑从繁杂出发,设一个 \(bool\) 数组,表示满足状态条件是否能够完成,然后再考虑优化。(\(eg:P2224\))

\(DP\),如果题目要求对满足要求的一种字符串计数,那常用方法是先解决满足要求的字符串判定问题,然后把要用的东西丢进 \(DP\) 数组里面,然后再进行 \(DP\)。这个东西个人认为和 \(DP\)\(DP\) 差不多,可以先写一个 \(trans\) 数组,表示这个状态的下一位是哪个,再来进行转移。简单来说就是先判定再计数。(\(eg:P4590\))

\(DP\),判断一个东西是否满足四边形不等式定理有一个非常简单方法。拉出来一长一短两个区间,同时向长短两个区间后面增加一个数,如果可以判断这两个区间加了这个数之后哪个增加的代价更大(比较的是差量),那么这个东西就满足四边形不等式定理。

如果是大区间的增加量大于小区间的增加量,那么我们可以求出这个问题的最小代价。

相反的,如果是小区间的增加量大于大区间的增加量,那么我们可以求出这个问题的最大收益。

四边形不等式这个定理很强,它可以推出来决策单调性,完全单调性和凸函数。

\(2D/1D\) 的决策单调性可以用分治来优化。(\(eg:P5574\))

完全单调性可以二分队列。(\(eg:P1912\))

凸函数 \(wqs\) 二分即可。(\(eg:P4383\))

\(DP\),当在序列上做 $ \min/\max $ 计数的时候可以考虑在排序之后来解决。

\(DP\),一些 $ \min/\max $ 计数问题和绝对值计数问题可以转化为序列匹配问题。

\(DP\),序列匹配问题的计数套路是设序列前 \(i\) 个数中匹配了 \(j\) 个的 \(\cdots\) (\(eg:P8321\))

字符串,排列字符串使其字典序最小的方法是相邻调整法,即对于两串 \(a,b\),若 \(a+b<b+a\),则称 \(𝑎\) 小于 \(𝑏\)

\(DP\)\(DP\) 的时候要考虑多种转移顺序,不一定是顺序。(\(eg:ABC225F\))

\(DS\)?反正有 \(popcount\) 操作的时候要想到值域很小。

图论,看到只经过边权 \(\le\) 或者 $ \ge $ 的边要想到 $ kruskal $ 重构树。

图论,要让两个点的 \(LCA\) 深度最小,那么就是要让两个点的 dfs 序差异最大。

DS,线段树合并不垃圾回收的空间复杂度为 $ O(n\log n) $。垃圾回收的空间复杂度为 $ O(n) $,但是也要开四倍空间!!!

杂类,摩尔投票法可以使用线段树来维护。

分块,空间开不下的时候可以滚块!!!

杂项,一切似乎不可优化的式子都要考虑单调性!!!

杂项,树上路径问题,可以考虑点分治。

杂项,对于 $ l \le i \le j \le r $ 的问题,答案为 $ \min / \max $ 的时候考虑支配对,答案为和或积的时候考虑分治。

杂项,看到一堆数的乘积的时候想到如果一项为 0,那么式子值为 0。

杂项,看到异或要想到线性基。

Math,两个组合数乘起来的时候可以想到范德蒙德卷积。

posted @ 2025-06-29 20:00  LittleFoxFairy  阅读(18)  评论(0)    收藏  举报