trick合集

杂项

  1. 对一一个一维问题,我们可以考虑枚举分割点,然后通过合并分割点两边的数据来计算答案

  2. 对于构造方案,排列。可以尝试按照有/无规则随便构造一个,然后把这个构造向合法的构造修改靠拢

  3. 对于线段/区间问题,我们可以考虑对区间/线段排序. 同时我们可以考虑按照排序决策.但是排序顺序与决策顺序不一定一样,可能不一样

  4. 对于一个一维线性问题,我们可以将其转化为前缀和/差分的问题. 然后通过图论建模等方式解决

构造

  1. 少量元素生成大量结果->存在一种稳定、可预测的组合规则,使目标结果可以被结构化地编码出来。

例题: construct

  1. 在操作,变换的题目中,我们可以尝试发掘不变的量,可以是量本身,也可以是量关于取模的结果;对于不变量的发掘,
    可以从多个角度.例如从相同性质/类型中挖掘,或者从一个具体的数据的操作和变换中发掘

例题:CF2237D Fullmetal Bitchemist

贪心

  1. 思考:改变这个选择会使什么东西变坏?以及变坏必须满足什么条件?

  2. 思考在部分情况下,为什么某些贪心会成立. 最好分析是数学语言化的,因为这更容易触碰到贪心的本质

  3. 我们分析,更多要聚焦于我们有什么性质,因为这可以利用.而不是我们没有什么情况,因为这只是问题,没有价值

eg:“这个条件具体保证了什么,而我的算法又恰好需要什么保证?”

  1. 寻找简单情况与一般情况的差异

  2. 考虑按照最显然的没有限制的情况贪心,然后向有限制的情况靠拢

数位

  1. 按照数位考虑.当要求构造的结构与数相关的时候.可以把我们构造的数,或者目标的数按照数位来拆解,可以一个数位一组,也可以多个数位一组.

例题: construct

状态设计

状态是我们用于分步计算和转移的工具

  1. 我们在设计状态的时候,可以抛弃一些信息.哪怕这回导致错误的计算,但是必须保证最终,正确的答案总会把错误的计算挤走.

图论

性质挖掘

图论问题的性质挖掘非常重要,所以我单独开一个

  1. 我们在研究图论问题时,我们可以考虑构造类似环,链的特殊结构来寻找性质. 哪怕这不是题目本身需要的

  2. 我们在研究图上的路径问题时,可以考虑对路径取反,即\(s \to t\)变成\(t \to s\),来挖掘性质

  3. 我们可以对图的度数来分析性质

  4. 我们在研究性质的时候,我们可以对图的点进行分类

  5. 我们考虑通过发现的信息是否可以构造环,环有什么特点.

  6. 我们可以对结构取逆来分析

  7. 对于图论建模题目,我们考虑每个点,每个边都是怎么产生的?它连接哪些点?度数由什么决定?

  8. 连通块可能是什么?

其他

  1. 把边的问题和点的问题相互转化是常见的trick

  2. 对于树上多个点的问题,我们可以将其拆为单个点的问题,然后在不同的点之间移动

  3. 对于树上问题,如果没有思路,可以尝试分析直径,中心,重心,来解决

动态规划

  1. 我们可以使用辅助的数组来优化动态规划

  2. dp有的时候可以逆着来

去重

  1. 给每个方案/转移 制定一个独特的选择/代表

对于每个合法方案,指定一个唯一的元素作为它的代表,使得每个方案只会被统计一次。

常见的代表元素:

  • 最小/大元素/匹配/操作;
  • 最左/右边的元素/匹配/操作;
  • 最后加入的元素/匹配/操作;
  • 固定的匹配/操作
  1. 强制规定操作顺序

如果一个方案可以通过多种操作顺序实现,那么规定一个规范顺序。

这个顺序的规范可以是状态内所有的规范,也可以是对于特地元素例如最后一个,第一个元素的限制

  1. 划分成互斥情况

  2. 按照最后一次操作分类

不同的转移变量/状态 给不同的最后一次操作

  1. 规范化表示

有时同一个对象存在多种表示方法。

例如一个无向图中的一条边:

\[(u,v)=(v,u) \]

如果直接枚举两个端点,会统计两次。

规定:

\[u<v \]

就可以唯一表示这条边。

更复杂的情况:

  • 无向路径规定从较小端点开始;
  • 无根树规定某个特定节点作为根;
  • 环规定从最小编号节点开始,并规定方向;
  • 集合规定按照递增顺序表示。
    这实际上是在给等价的表示方式选择一个标准代表。
  1. 先计数,再除以对称性/重复计算数量

状态设计

  1. 可以考虑记录最大值和次大值这样的来实现状态的压缩

  2. 记录状态的边界信息

有些题目处理一个区间时,未来会关心这个区间的边界。

例如:

\[f_{l,r,0/1} \]

其中最后一维表示区间左端点是否被选择。

组合计数

  1. 在组合计数题目中,我们可以通过固定状态(枚举),来简化问题. 例如不相交的区间数量可以先固定一个区间,看有哪些区间与这个区间不相交.
posted @ 2026-09-22 22:36  txp2025  阅读(9)  评论(0)    收藏  举报