计数,计数,计数,以及组合数学
关于组合的优质入门文章:https://www.cnblogs.com/alex-wei/p/Combinatorial_Mathematics.html
计数题单:https://www.cnblogs.com/Schucking-Sattin/p/16912335.html
P10175 「OICon-02」Subtree Value
复杂度与模数相关的题,非常神秘。
考虑一种朴素的做法,发现 \(|S|\) 不好统计,所以枚举 \(|S|\),然后做一个树上背包,这样的时间是三次方的。
考虑优化。发现模数为 \(U^V\),可以将 \(|S|\) 拆成 \(kU+r\),然后答案就是 \(\prod (kU+(a_v+r))\)。我们发现这个东西可以看成一个关于 \(kU\) 的多项式,那么在 \(kU\) 指数超过 \(V-1\) 时 \(\bmod U^V\) 的结果为 0,可以忽略。
所以可以枚举 \(r\),对于每个状态直接维护一个长度为 \(V\) 、底数为 \(kU\) 的多项式,直接背包 \(O(n^2UV^2)\) 是能过的。
P11363 [NOIP2024] 树的遍历
神仙题。
首先观察性质:不妨先定根,于是对于每一个点 \(u\),考虑与它相连的边会以什么形态连边:一定是它周围的这些边构成一条链,然后再向各自的子树里连边(表述得好不清晰但是懒得画图了)。
对于这样的每一条链,链的开头一定在从父亲节点连过来的边,而对于后面链的形态是可以随意排列的。于是,我们得到了生成树的总数:
然后经过手摸,我们发现对于一个固定的生成树,它能够作为根的边一定在一条从叶子到叶子的链上。而如果钦定了这样的一条链,假设链上的节点是 \(v\),那么这些节点的链除了开头,还会多钦定一个结尾,于是这种情况的生成树数量为:
那么我们就可以根据这个性质进行计数。
设 \(f_{i,0/1}\) 为在 \(i\) 子树内,钦定从叶子到 \(i\) 的一条链作为可选根,有/没有关键边的生成树数量。然后简单转移并计算答案即可。
CF660E Different Subsets For All Tuples
考虑如何刻画“本质不同子序列”。在相同的子序列中钦定出一个,不妨只统计每种子序列第一次出现的次数,也就是从前往后做一个最早贪心匹配。
假设子序列中第 \(i\) 个数的值是 \(val_i\),在原序列中出现的位置是 \(pos_i\),那么我们需要要求 \(1\) 到 \(pos_1-1\) 没有 \(val_1\),\(pos_1+1\) 到 \(pos_2-1\) 没有 \(val_2\)... 依次类推。那我我们发现这样的钦定方式是可以统计的。如果先忽略空子序列,那么答案为:
可以发现这种形式很像二项式定理,事实也确实如此,我们可以把它变换为二项式定理的形式,详略。
还有一种做法是直接做一个dp然后算答案,比较无脑。
CF722E Research Rover
比较难想的容斥。
首先,电量的取值只有 \(\log\) 种,所以只需要记经过 \(\log\) 个节点即可。
设 \(f_{i,j}\) 表示到达第 \(i\) 个点时 恰好 经过 \(j\) 个点的路径方案数。设 \(w_{i,j}\) 表示从点 \(i\) 走到点 \(j\) 的方案数(中间可以走过其他点),也就是 \(\binom{x_j-x_i+y_j-y_i}{x_j-x_i}\)。
枚举一个能到达点 \(i\) 的点 \(k\)。如果直接计算 \(\sum f_{k,j-1}w_{k,i}\),会多算出一些经过中间点的方案。枚举 \(k\) 和 \(i\) 中间出现的第一个中间点 \(p\),从整体来看,任何一条从 \(p\) 到 \(i\) 的路径都会被多算一遍,也就是会多算 \(\sum f_{p,j}w_{p,i}\)。(仔细想想,可以发现这个东西是一个双射。)
这实际上是一个 差分容斥,类似用大于等于 \(x\) 的东西减去大于 \(x\) 的东西,得到的结果就是恰好等于 \(x\) 的东西。
所以我们可以分别计算然后减掉,得到转移:
时间复杂度平方对数。
P3214 [HNOI2011] 卡农
比较厉害的容斥。
首先发现题目中的能够重排的限制是假的,实际上求出排列的个数再除以 \(m!\) 就好了。所以题目是求有多少个大为 \(m\) 的片段组合,满足
- 每个片段都不为空
- 没有相同的片段
- 每个音阶的个数为偶数
设 \(f_i\) 表示长度为 \(i\) 的片段排列满足上述限制。
首先,考虑满足第三个条件的方案数,如果知道了前 \(i-1\) 片段,那么第 \(i\) 个片段也就固定了,这样方案数是 \(A_{2^n-1}^{i-1}\)。
考虑满足第三个条件,不满足第一个条件的方案数,也就是钦定第 \(i\) 个片段是空的,那么一共有 \(f_{i-1}\) 种。
考虑满足第三个条件,不满足第二个条件的方案数。钦定第 \(i\) 个片段与前 \(i-1\) 个片段中的一个相同,那么删掉相同的两个元素后,剩下的元素的排列方案数为 \(f_{i-2}\)。转化为固定一个长度为 \(i-2\) 的排列,在其中加入两个相同元素。位置有 \(i-1\) 种可能,取值有 \(2^n-1-(i-2)=2^n-i+1\) 种。所以这一部分的方案数为 \((2^n-i+1)\times (i-1)\times f_{i-2}\)。
考虑满足第三个条件,同时不满足第一个条件和第二个条件的方案数。显然不存在。于是得出转移。

浙公网安备 33010602011771号