#创作计划# 组合数学
2025-11-28 17:15:17
发布于:河南
基本定义在此不再过多阐述,介绍一下基本符号:
,含义为 选 的组合方案数。
,含义为 选 的排列方案数。
求组合数方式
一般采用预处理阶乘与逆元做到线性求组合数。
如果求 时 极大而 较小,此时无法预处理 的阶乘和逆元,可以采用下降幂运算,即预处理 的阶乘和逆元,将原式写为:
这样就可以用较快的时间来求出组合数。
错位排列数
- 使用容斥:
乘号后面进行预处理即可。
- 使用递推:设填后的序列第 为 ,将 向 连边。考察 所在的环,设其长度为 。去掉 所在的环,剩下的数的方案数为 。所以枚举 ,同时计算长度为 环上的数方案数,有:
在计算 的同时,维护乘号后面的式子。
- 依然是递推:对上文的递推进行简化,仍然考察 所在的环,将 去掉同时将环上和 相邻的两个点连上,等价于对后面 个数做错排。注意当 所在环只有 和另外一个点的时候,由于点不能指向自己,此时相当于对剩下 个数做错排。
还有一种理解方式,考虑现在已经有一个合法的错排图,要向里面加入一个点,则可以在任意一条边加入该点,但这样只考虑到了新加入的点所在环长度大于 的情况,所以还需考虑在其中取出一个点,与新加的点互相连边,剩下的点形成一张错排图。
综上有:。
「KDOI-02」一个仇的复
观察数据范围,猜测最终时间复杂度为 。
发现方格宽度为 ,只能容下大小为 的方块竖着放,不妨将 看作横着放,所以只需要考虑有多少个 竖着放即可,设个数为 ,对 进行枚举,时间消耗为 ,其中 。
现在问题化为两个子问题,一个为选竖着的 的方案数,一个为放完竖着的 后整个网格横着放的方案数。不妨先考虑第二个子问题。
先思考没有竖着的 的方案数。将其展开为 的平面,考虑插板,由于已经有两个基本块,所以只需要再插 个板,而在 与 之间无法插板,所以可供插板空隙为 ,故方案数为 。
现在考虑有竖着的 情况,由于枚举了竖着的 的数量,设其为 。因为该数量固定,所以影响空隙个数的只有形成的连通块个数,设其为 ,则空隙个数即为 。同理,可供插的板也只与连通块个数有关,为 。故最终方案数为 。故需要枚举形成连通块数量,时间消耗为 ,其中,。
接着考虑第一个子问题。由于需要分成 个连通块,所以用来分隔网格的竖着的 的连通块个数即为 。但是如果竖着的 放在了开头或者末尾是不会影响网格连通块个数的,所以 连通块个数还可以为 。对这个问题做插板,发现可以插 个板,而可供插板的空隙为 个的开头结尾和中间共计 个位置。所以该问题方案数为 。
最后考虑放着这些连通块到网格的方案数,相当于将剩下的 个格子分为 块,仍然用插板法,得知方案数为 。
发现有一种情况没有考虑,即 时选 个竖着的 的方案,这种情况无法刻画,因为没有形成连通块,最后特判加上即可。
最终答案为:
可能空间开不下,但是发现可以预处理后两个组合数的阶乘和逆元,对前一个组合数只预处理阶乘,求的时候现求逆元即可(或者都开成 ,强转 )。
广义组合数
-
当 时,
-
当 时,
-
由二式得,当 时,有:
[集训队互测 2012] calc
首先可以做一个简单的 dp, 表示考虑 中的数,选了 个数在序列中的权值积,最后 即为答案。
观察 dp 转移:,发现转移系数和 有关,故矩阵快速幂中的转移矩阵不固定,没有前途。
本题生成函数对于笔者来说太过困难,所以在此只讨论使用拉插解题。
发现 dp 转移非常简洁,所以猜测对于固定的 , 在一个多项式上。设 表示 的多项式次数,则显然有,。观察 dp 转移式子,有:
又因为 次,所以 。因此只需要做 次 dp,然后拉插即可。
[JLOI2015] 骗我呢
发现值域为 ,则一行只有一个位置会 ,可以做出来简单 dp,优化过后变为 。
代数推导一点不会,组合意义天崩地裂。
发现式子很简洁,想用上一题的方法看看多项式,发现次数为 ,那肯定没救的。所以考虑组合意义,将其放在网格图上,考虑将 dp 值变为到达 的路径条数,dp 转移看为一条边。发现转移中有斜着的边,不好处理,所以将其平移。发现行末仍然有一条斜边,将其扩展为先向右再向下,于是得到一张网格图。由于将每一行行末扩展了,所以每一行长度为 ,则问题变为在网格图上,从原点出发,到达 的方案数,网格形状如下:

将网格形状转化为限制,变为不接触两条直线的方案数。称直线 为上方直线,直线 为下方直线,点 为 。考虑反射容斥,即将总方案数即从原点到 的路径数,减去碰到任意一条直线且可能越过直线的方案数,将碰到的直线依次写为一个序列,相邻相同的直线进行缩点,最后会得到 或 ,将不合法方案分为末尾为 的方案和末尾为 的方案。发现将 沿直线 对称得到 后,每一条从原点到达 的路径都可以通过从第一次接触 开始对称,最终到达 ;同理,每一条从原点到达 且接触了 的路径都可以从第一次接触 开始对称,最后到达 ,所以形成了双射。考虑这类方案对应接触序列是怎样的。考虑到达 且接触 的路径中从最后一次接触 到 的路径,由于为最后一次接触 ,所以不会再碰到 ,只有可能碰到 。所以这类路径个数对应序列结尾为 或 的序列个数;同理,若将 沿 反转,可以得到序列结尾为 或 的序列个数。发现总共多减去结尾为 和 的序列个数。考虑将 再次沿 对折,仍然考虑从原点到 的路径中最后一次接触 来看,后面一定会接触 ,然后可能在去往 的路径上再次接触 ,所以路径末尾为 或 。
所以有一个简单的容斥,发现 形成的直线斜率为 ,每两次对称一定会向 轴移动,所以至多移动线性次,所以时间复杂度为线性。
第一类斯特林数
表示 个数,分为 个环(即 与 算一种方案)的方案数,记作 。
有递推式:。代表新加入的点是新增一个环还是插入到原有的环中共 个位置中。
有性质:
-
,易证。
-
,证明考虑数学归纳法。
-
。考虑任意一个排列都可以通过 连边来映射成唯一一个由若干个环组成的图;同理,环也可以映射成唯一一个排列。二者形成双射。
下降幂
有 。文章开头即为下降幂优化求组合数式子。
其与组合数相乘有着优雅的形式,如下:
发现原本式子中两个乘数都含有 ,转化完后只有一个式子含有 。
第二类斯特林数
表示 个数,分为 组,每组无序,组与组之间没有区别的方案数,记作 。
有递推式:。代表新加入的点是新增一组还是加入原有的 组中。
第二类斯特林数可用于转化幂:,证明考虑数学归纳法:
[省选联考 2020 A 卷] 组合数问题
发现原式为 的次幂乘上关于 的组合数,因为 很大,不能枚举,这个形式有不是那么好看,所以使用下降幂来将其优化一下。将原多项式变为下降幂多项式,设 ,然后开始转化:
则问题转化为求 。
因为有 ,所以将 进行转化:
可以递推预处理出所有第二类斯特林数,然后 求出所有 ,最后 求出答案。
总时间复杂度 。
全部评论 2
%%%
2025-11-29 来自 上海
0%%%
2025-11-28 来自 广东
0


















有帮助,赞一个