计数问题的思考方法
计数问题的思考方法
——以《[ARC102E] Stop. Otherwise...》为例
动态规划
如果要使用 DP,则重点在其状态的设计,即我已经考虑了什么,当前正在考虑什么,通过一个不断将考虑范围扩大的方法,得到答案。
在转移的过程中,往往通过当前决策点的不同状态,从不同的状态转移过来(或转移到不同的状态),以得到不同的方案数。
最后根据转移方程进行优化。
DP的优势在于灵活,使得其可以应对各种复杂的问题。
在这道题中, \(f_{i,j}\) 表示考虑前 \(i\) 对数,选择了 \(j\) 个数的方案数。那么这对数可以不选,或者选 \(1\) 个,\(2\) 个, \(3\) 个……以此进行转移。同理 \(g_{i,j}\) 表示考虑了 \(i\) 个没有限制的数,其中选择了 \(j\) 个的方案数。对转移前缀和优化即可在时间限制内得到答案。
参考:[AT4362] [ARC102C] Stop. Otherwise... - 洛谷专栏 (luogu.com.cn)
组合计数
即直接考虑将题目抽象为组合式,再以数学方法或预处理等算法进行优化。
如果要使用这种方法,一定要使用正确的组合意义与推式子技巧,在枚举的时候应该使用组合意义相近的变量,使得式子得到简化。
组合计数的优势在于简单易懂,只要式子推对了,不容易出错。
对于这道题而言,对与计算和不等于 \(s\) 的答案,可以直接枚举出现了几种点对,有式子:
最后一步由范德蒙德下指标卷积可得,单次复杂度 \(\mathcal O(s)\) 可以计算。
其实这道题有很多种但是这一种,由于所枚举的 \(i,j\) 是意义相关的两种(即特殊的选择几种,非特殊的选择几种),所以其表达式类似,往往可以简单的进行优化。
不用最后一步的暴力方法需要对 \(k<2s\) 特判,但最后使用了卷积后就不用了。
附上常用组合公式:
范德蒙德卷积及其推论:如果两个都为正,可以利用 \({n\choose m}={n\choose n-m}\) 将其中一个取反。
错位式:
连续上指标求和:
这个东西可以逆用,将下指标的值 \(-1\)。
上指标卷积:
用这个可以算 \(\sum_{i=0}^ni^a{n-i\choose b}\)
带权和:
参考:
ARC102E Stop. Otherwise... 题解 - 洛谷专栏 (luogu.com.cn)
生成函数
生成函数最关键的就是考虑清楚对象与大小函数,通过多项式的运算得到答案。
统计取到一定大小函数的方案数。
生成函数的优势在于推导方式灵活,较不容易出错,并且可以使用 \(FFT\) 优化到 \(\mathcal O(n\log n)\)
比如这道题,考虑不能出现的数为奇数 \(X=2s+1\) 的情况,,观察有限制的数组这一对象,其为 \(\{i,T-i\}\) 这个组,我们可以当作一个处理,最后再乘以二,则其为 \(A(x)= x\),即大小函数为 \(1\) ,方案数为 \(1\)。
那么对其进行 \(\text{SEQ}\) 构造,则 \(\text{SEQ}(A(x))=\frac 1{1-A(x)}=\frac 1{1-x}\),最后乘二,但是不选的那种算重了,所以生成函数为 \(\text{SEQ}(B(x))=\frac 2{1-x}-1=\frac {1+x}{1-x}\)。对于没有特殊限制的组,其为 \(\text{SEQ}(B(x))=\frac{1}{1-x}\),最后答案是整个对象的 \(\text{MEST}\) 构造,即 \(\text{SEQ}\) 构造的乘积,最后为 \((\frac {1-x}{1+x})^{s}(\frac 1{1-x})^{k-2s}\),偶数的情况稍作特判可得。
直接动态维护上述式子做到 \(\mathcal O(nk)\)。
参考:
题解:AT_arc102_c [ARC102E] Stop. Otherwise... - 洛谷专栏 (luogu.com.cn)
容斥反演
容斥是通过其实是通过数学原理简化限制,从全部满足,变成存在一个不满足。
使用容斥也需要找到真正的限制对象是什么,做到刚好不满足,可以将复杂的限制容斥掉,保留简单的,容易满足的限制以符合定义,得到正确的答案。
容斥原理的优势在于避其锋芒,可以有效的转化限制,处理全部要求类的问题。
反演则是容斥的进一步深化,特殊化,总结出固定的式子,做到恰好,至多,至少之间的转化。
这道题使用容斥原理,设 \(x=2s+1\),则钦定有 \(i\) 组数不能选的方案数,答案为:
\(\sum_{i=1}^s(-1)^i{s\choose i}2^{x-i}{K-s-i-2+n\choose n}\),对于 \(x\) 为偶数的情况同理特判加上选择 \(\frac x2\) 的方案数。
参考:容斥原理、ARC102C 题解 - 洛谷专栏 (luogu.com.cn)
组合意义
虽然这一道题不涉及组合意义的转化,但是也说一下。
组合意义是将一些给一些形式化的表达式赋予实际的意义,通过一些直观的感受发现性质转化问题,从而找到新的突破口。
组合意义的转化理论上来说确实可以通过强大的数学推到能力证明,但实际上由于表达式的复杂,或者推到过程的复杂,往往难以进行。
而组合意义相当于是从另一个层面找寻性质,如一个虫洞般省略过程的转化问题。而这些找到的性质往往是可以但难以通过数学推导方法直接得出的。
由于这个性质是独立得出的,往往可以运用到数学推导的各个角落进行优化。
这里以 [2024.11.15T3 作曲家](\xz604\share\信息竞赛资料\05 - 套题资料\20241115\problem\problem5.pdf) 为例。
如果你直接生成函数,会得到函数$F(x)=(\frac{1-x{m+1}}{1-x})n $,以及需要求的式子 \(\sum_{i=1}^n([x^i]F(x))^2\),如果你直接暴力将 \(F(x)\) 展开,会得到式子:
那么答案就是
你会发现无法再化简了。
但是直接观察题目,会发现\(f_i\)是有对称性的,即 \(f_i=f_{nm-i}\) 但是如果你直接将这个性质作用于答案式,会发现无济于事。但如果你作用于最开始的式子
就会发现式子非常简单,这体现了组合意义发现的性质的优化是可以使用于任何地方的,其工作原理是这个性质并不是通过任何一个数学步骤推导得出的,不依赖于任何一个过程,所以施加于任何地方都不是无用的,也告诉我们推式子问题并不能仅仅收到式子本身的限制,所谓“只需要推式子技巧,不需要分析额外性质”的观点是错误的。
而之所以答案式不能运用性质,是因为答案式已经展开的过于复杂而分散,这也告诉我们应该在式子最简单的地方运用性质。
而之所以仅将 \(f_i^2\) 中的一个 \(f_i\) 转化成 \(f_{nm-i}\) 是因为其可以凑成一个卷积的形式,所以运用性质是带有凑条件,凑形式的目的性的。
当然这道题有更加组合意义的如下解法:

在“组合计数”板块提到的等式:\(\sum_{i=0}^ni^k{n\choose i}=\sum_{i=1}^kn^{\underline i}2^{n-i}\) 也可以用组合意义的方式证明:
左侧式子可以看作,先从 \(n\) 个盒子中选择 \(i\) 个盒子,再将 \(k\) 个有标号的小球可重复的放入这 \(i\) 个盒子的方案数。那么我们先考虑这 \(k\) 个小球,即先将这 \(k\) 个小球放入 \(n\) 个盒子,再选出若干个盒子使其覆盖这些有小球的盒子。 \(\sum_{i=1}^kn^{\underline i}2^{n-i}=2^{n-k}\sum_{i=1}^kn^{\underline i}2^{k-i}\)


浙公网安备 33010602011771号