计数问题的思考方法

计数问题的思考方法

——以《[ARC102E] Stop. Otherwise...》为例

动态规划

如果要使用 DP,则重点在其状态的设计,即我已经考虑了什么,当前正在考虑什么,通过一个不断将考虑范围扩大的方法,得到答案。

在转移的过程中,往往通过当前决策点的不同状态,从不同的状态转移过来(或转移到不同的状态),以得到不同的方案数。

最后根据转移方程进行优化。

DP的优势在于灵活,使得其可以应对各种复杂的问题。

在这道题中, fi,j 表示考虑i 对数,选择了 j 个数的方案数。那么这对数可以不选,或者选 1 个,2 个, 3 个……以此进行转移。同理 gi,j 表示考虑了 i 个没有限制的数,其中选择了 j 个的方案数。对转移前缀和优化即可在时间限制内得到答案。

参考:[AT4362] [ARC102C] Stop. Otherwise... - 洛谷专栏 (luogu.com.cn)

组合计数

即直接考虑将题目抽象为组合式,再以数学方法或预处理等算法进行优化。

如果要使用这种方法,一定要使用正确的组合意义与推式子技巧,在枚举的时候应该使用组合意义相近的变量,使得式子得到简化。

组合计数的优势在于简单易懂,只要式子推对了,不容易出错。

对于这道题而言,对与计算和不等于 s 的答案,可以直接枚举出现了几种点对,有式子:

ans=i=0sj=0s(n1i+j1)(si)(k2sj)2i=i=0s2i(si)j=0k2s(n1nij)(k2sj)=i=0s2i(si)(n1+k2sni)

最后一步由范德蒙德下指标卷积可得,单次复杂度 O(s) 可以计算。

其实这道题有很多种但是这一种,由于所枚举的 i,j 是意义相关的两种(即特殊的选择几种,非特殊的选择几种),所以其表达式类似,往往可以简单的进行优化。

不用最后一步的暴力方法需要对 k<2s 特判,但最后使用了卷积后就不用了。

附上常用组合公式:

范德蒙德卷积及其推论:如果两个都为正,可以利用 (nm)=(nnm) 将其中一个取反。

i=0r(ni)(mri)=(n+mr)i=rs(nr+i)(msi)=(n+mr+s)

错位式:

(nr)(rk)=(nk)(nkrk)

连续上指标求和:

l=kn(lk)=(n+1k+1)

上指标卷积:

i=0n(ia)(nib)=(n+1a+b+1)

带权和:

i=0nik(ni)=nk2nk

参考:

排列组合 - OI Wiki (oi-wiki.org)

ARC102E Stop. Otherwise... 题解 - 洛谷专栏 (luogu.com.cn)

生成函数

生成函数最关键的就是考虑清楚对象大小函数,通过多项式的运算得到答案。

统计取到一定大小函数的方案数。

生成函数的优势在于推导方式灵活,较不容易出错,并且可以使用 FFT 优化到 O(nlogn)

比如这道题,考虑不能出现的数为奇数 X=2s+1 的情况,,观察有限制的数组这一对象,其为 {i,Ti} 这个组,我们可以当作一个处理,最后再乘以二,则其为 A(x)=x,即大小函数为 1 ,方案数为 1

那么对其进行 SEQ 构造,则 SEQ(A(x))=11A(x)=11x,最后乘二,但是不选的那种算重了,所以生成函数为 SEQ(B(x))=21x1=1+x1x。对于没有特殊限制的组,其为 SEQ(B(x))=11x,最后答案是整个对象的 MEST 构造,即 SEQ 构造的乘积,最后为 (1x1+x)s(11x)k2s,偶数的情况稍作特判可得。

直接动态维护上述式子做到 O(nk)

参考:

符号化方法 - OI Wiki (oi-wiki.org)

题解:AT_arc102_c [ARC102E] Stop. Otherwise... - 洛谷专栏 (luogu.com.cn)

容斥反演

容斥是通过其实是通过数学原理简化限制,从全部满足,变成存在一个不满足。

使用容斥也需要找到真正的限制对象是什么,做到刚好不满足,可以将复杂的限制容斥掉,保留简单的,容易满足的限制以符合定义,得到正确的答案。

容斥原理的优势在于避其锋芒,可以有效的转化限制,处理全部要求类的问题。

反演则是容斥的进一步深化,特殊化,总结出固定的式子,做到恰好,至多,至少之间的转化。

这道题使用容斥原理,设 x=2s+1,则钦定有 i 组数不能选的方案数,答案为:

i=1s(1)i(si)2xi(Ksi2+nn),对于 x 为偶数的情况同理特判加上选择 x2 的方案数。

参考:容斥原理ARC102C 题解 - 洛谷专栏 (luogu.com.cn)

组合意义

虽然这一道题不涉及组合意义的转化,但是也说一下。

组合意义是将一些给一些形式化的表达式赋予实际的意义,通过一些直观的感受发现性质转化问题,从而找到新的突破口。

组合意义的转化理论上来说确实可以通过强大的数学推到能力证明,但实际上由于表达式的复杂,或者推到过程的复杂,往往难以进行。

而组合意义相当于是从另一个层面找寻性质,如一个虫洞般省略过程的转化问题。而这些找到的性质往往是可以但难以通过数学推导方法直接得出的。

由于这个性质是独立得出的,往往可以运用到数学推导的各个角落进行优化。

例题:P1758 [NOI2009] 管道取珠

这里以 [2024.11.15T3 作曲家](\xz604\share\信息竞赛资料\05 - 套题资料\20241115\problem\problem5.pdf) 为例。

如果你直接生成函数,会得到函数$F(x)=(\frac{1-x{m+1}}{1-x})n $,以及需要求的式子 i=1n([xi]F(x))2,如果你直接暴力将 F(x) 展开,会得到式子:

F(x)=i(j=1im+1(1)j(nj)(n+i(m+1)j1n1))xi

那么答案就是

i=0nm(j=0jm+1(1)j(nj)(n+i(m+1)j1n1))2

你会发现无法再化简了。

但是直接观察题目,会发现fi是有对称性的,即 fi=fnmi 但是如果你直接将这个性质作用于答案式,会发现无济于事。但如果你作用于最开始的式子

i=1nfi2=i=1nfifnmi=[xnm]F2(x)=[xnm](1xm+11x)2n

就会发现式子非常简单,这体现了组合意义发现的性质的优化是可以使用于任何地方的,其工作原理是这个性质并不是通过任何一个数学步骤推导得出的,不依赖于任何一个过程,所以施加于任何地方都不是无用的,也告诉我们推式子问题并不能仅仅收到式子本身的限制,所谓“只需要推式子技巧,不需要分析额外性质”的观点是错误的。

而之所以答案式不能运用性质,是因为答案式已经展开的过于复杂而分散,这也告诉我们应该在式子最简单的地方运用性质。

而之所以仅将 fi2 中的一个 fi 转化成 fnmi 是因为其可以凑成一个卷积的形式,所以运用性质是带有凑条件,凑形式的目的性的

当然这道题有更加组合意义的如下解法:

作者:lupengheyyds

出处:https://www.cnblogs.com/lupengheyyds/p/18540423

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   lupengheyyds  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示