下次数数题做不出来的时候看看这个。
算贡献
贡献是否可以写成若干元素的和?
如果可以,将题目弱化为“对于求和的每一部分,分别算出这部分被计入答案的次数”,将数 sum 变成数 cnt。
动态规划 1:过程分步
符合要求的序列/树是否可以分段构造?是否存在状态数较少的子结构?
如果感觉有但是找不到:将序列逆序,将矩阵转置,将排列求逆,将树改为自上向下构造。
动态规划 2:DP 套 DP/矩阵快速幂
是否有你认为“状态很少”但难以简单地遍历状态的结构?如果有,尝试使用搜索检查状态数量,并进行适当的剪枝。
例子:[NOI2022] 移除石子,[ZJOI2019] 麻将。
是否存在 DP 的某一维非常大(
容斥 1:正难则反
一个合法的组合对象是否需要同时满足一些互相相关的条件?其反面的条件是否更简洁?
对于“连通”的条件可以枚举其包含某个点的极大连通块。
对于一些可以支持在线判断的条件可以枚举第一个不合法的位置。
容斥 2:二项式反演
一些形如“恰好”的限制是否会将问题的复杂度上升到不可接受的范围?
弱化掉一些形如“不同”或者“相同”的限制后,问题是否会变得可做?
如果可以,尝试在保持这个做法可以生效的同时增加一些钦定的性质,再套二项式反演。
例:[ARC121E] Directed Tree。
容斥 3:莫比乌斯反演
对
将答案乘上
拉格朗日插值
是否存在 DP 的某一维非常大(
问题关于某一个参数的答案是否可以写成一个多项式的形式?
例:[省选联考 2022] 填树。
生成函数
这块 NOI(P) 应该不能考。
组合转化
括号:折线,树。
环:断环为链。
序列:差分,前缀和。
组合数:把
组合数:从
分数:在
如果这些都不管用剩下的估计也就只有外星人会做了,建议直接跳题。
分段打表
问题是否可以递推求解?是否可以在代码长度内储存所有信息?
是否可以在合理的时间内打完表?能否承担考场机子爆炸带来的损失?