组合数学

组合数学

Basic Formula

证明:

另一个证明同理

斯特林反演:

证明:

已知

另一个证明同理

应用:


第一类斯特林数求行(OGF形式)

已知 翻转一下再卷上 再除以 即可

对应到第一类斯特林数就是 。使用倍增解决


第一类斯特林数求列(EGF形式)

有且仅有一个圆排列的 所以恰好 个有标号圆排列的

第一类斯特林数是无标号的所以其对应的 还要除以 尝试从结论倒推能推出什么:把所有 看作 得到 两边同时取所有项并乘上一个 的系数 右边

于是倒着推也是可以推出答案式子的

注意ln之后常数项为 不能qpow的时候直接return exp(ln(f)*k),要提前去掉末尾


第二类斯特林数求行(OGF形式)


第二类斯特林数求列(EGF形式)

也可以用和第一类求列相类似的推导,注意 常数项系数为 qpow时同第一类求列都要特殊处理


CF 932 E


HEOI2016 求和

(可优化到线性,见 200415 T3)


FJOI2016 建筑师

个数里选若干个组成 个环,剩下的再组成 个环

即一共组成 个环每种组成 个环的方式被算了


P4827 Crash 的文明世界


BZOJ3622 已经没有什么好害怕的了

表示恰有 多的方案数 表示至少 多的方案数 表示前 小的数,已经配了 现在左边是否还有没配对的 的方案数

对于

对于

剩下的随便配对即

上面的dp是错误的,其并不能算出至少 对的方案数因为会有一些时候的”前缀未配对B个数”大于1

比如配对 时配 对时会算出 实际上是

应记录对于每个 有多少个 小于它,记为 则记 为前 个点,硬点了 个连比他小的边,剩下的不连,的方案数。转移就是

注意到这个转移恰好不重不漏的计算了至少 个大到小的边的情况,至于剩下的 条边可以任意连,答案就是


P4002 生成树计数

构造

即得 已知一个函数各项系数 #### 如何快速求

$$

$$

另解:

表示 prufer序列前 项的出现次数,有

考虑其组合意义即对于一个prufer序列我们在它后面再添上 使得每个数恰好出现其度数次,然后我们可以把 看成对 的每个颜色的 个位置染 次色,且这 次染色可以染到同一位置的方案数。然后上面式子的意思就是一共有且仅有一个数 被染了 次,其他的都被染了 次,问最后的方案乘上改方案对应的权值( )的值

注意到 比较小可以枚举这 次染色一共染了几个不同的位置,比如染了 个指定的位置时方案数即为

然后 表示数字 都只染了 次,一共占了prufer序列的 个位置时的只考虑染了色的位置时的总权值

表示数字 中有且仅有一个数染了 次(其余都是染 次)一共占了prufer序列的 个位置时的只考虑染了色的位置时的总权值

转移时考虑有没有染到后 个中对应的那个位置得到

注意初值是

然后分治ntt的写法可以不管什么看上去是 这样的东西不知道怎么推导

直接计算两边两个关于 的多项式,一个 表示有且仅有一个数字染了 次的方案,一个 表示全部都只染了 次,然后直接

即可(注意只用最后 项,最后 即剩下的 个空格任意填 ,每填一个 则权值多乘上一个


P3711 仓鼠的数学题

翻转后卷积即可


CF 932 E严格加强

。其中 是一个关于 次多项式

先把 转成下降幂形式

如何转次幂为下降幂?

,有

因为 也是 次多项式 只需多点求值求出所有 再除以 卷上 即可 (注意顺序)


2019 江苏省队集训D1T3 魔法咒语

已知 要求线性

这个 只和 有关


下降幂多项式乘法

其点值的

即直接把 卷上 即可得到点值的

两个下降幂的点值的 对应项相乘再乘上多余的一个 以去掉两个同时作为 的分母上的 即可得到答案的点值的

从点值 求原下降幂多项式直接除以 即乘上 即可


P4389 付公主的背包

直接调和级数一样做即可


下降幂转次幂

下降幂转点值的 直接乘上

再上个快速插值

快速插值

使用多点求值得到每个

然后每一项的常数项即为 再乘上 return tr[lk]*solve(l,mid)+tr[rk]*solve(mid+1,r);

但这题可能会 。。。 跑了36s

注意到 所以


WC2019 数树

首先有

type=0

直接求并大小

type=1

注意到有一个容斥式子

证明:

然后带入 无脑推式子

其中 表示含有边集 的树有多少种

形成 个连通块

证明可以直接用行列式,这里写另一种

把每个已经确定的连通块看成一个点,然后直接用prufer序列,但是每一个连出去的边都有 种连法,令prufer序列第 个点为 ,令第 个点在prufer序列里出现 次,那么其度数为 ,得到

若有 条边,则连通块个数

相当于每个大小为 的连通块对答案有 的贡献

表示以 为根,包含 的连通块大小为 时,子树内所有情况下的答案(且不包含本身所在的连通块)

得到

转移是

现在已经可以 求解,考虑再优化

看成是一个集合幂级数,则

再令 即可得到

即可 dp

type=2

其中 是两个树都包含 这个边集的方案数,且 (因为两棵树不等价,第一棵可以任选 中的一棵,第二棵也是)

所以带入得到

$$

$$

对于一个确定点数为 的树,共有 种形式

个点分成 个有标号且大小分别为 的连通块的方案是

则把 个点分成 个无标号且大小分别为 的连通块的方案是

令一种理解上式的方法:

一个大小为 的树的权值为

一个森林的权值为里面所有树的权值之积

求所有森林的权值之和

所以直接 exp 就行了


CodeChef PSUM

NTT卷积优化dp即可


BZOJ5093 图的价值

$$

$$

算出第二类斯特林数后直接for一遍即可


分布

方差 的关系

伯努利分布

一个变量 的概率为 的概率为

二项式分布

二项分布是 个独立的是/非试验中成功的次数的离散概率分布,其中每次试验的成功概率为

注:以下记

由定义可得每次成功与否是独立的,可得

或者组合意义下证明

有点难搞,因为 根据上面的类似推一下

所以

同时类似的可以得到


UOJ269 如何优雅地求和

这道16年的题给了点值,现在看上去很明显,实际上应该要能自己想出来最重要的一步即转成下降幂

注意点值转下降幂的公式中,哪里要除以阶乘哪里乘阶乘要想清楚!


cf961G Partitions

$$

$$

然后直接做即可,也可以用线性筛去掉快速幂的 (注意 0 base的)(实际上第一行的式子已经可以直接做了,只是模数比较恶心…)

或者从组合意义上考虑:

一个点被算进 ,只可能是

  1. 自己对自己的贡献,这个的方案数是

  2. 加入了其他已经分成 份中的一份集合时同集合的点对其的贡献,考虑 个点分成 份的所有划分,每一种划分中当前点都可以加入划分出的 个集合的任意一个,加入的集合中的每一个别的点都对 的贡献,当前点一共有 种选取集合的方法,每个集合的点数加起来是

于是有

求第二类斯特林数的一项还是要更简单一些 同样扫一遍即可(同样可用线筛去掉快速幂的


HDU6042 Journey with Knapsack

因为我们最终需要 项的系数,上式的后半部分在 次项的系数是拆分数 可以在 算出,但在 次项的系数就是只用 组合的方案不好搞,因此我们尝试把边界扩大到

注意到题目中的特殊条件 所以

所以 。对于一个确定的 一共只有 对其有影响,直接暴力算 对卷积到的位置的贡献

然后 只取前 项系数的时候任意两个选了 卷起来都超过范围了

可以得到

然后可以卷积这个的时候处理个前缀和直接线性

总复杂度


BZOJ4772 显而易见的数论

直接求所有分配方案下每个部分大小为定值的有多少个不好求,可以转换一下:

求一个至少有 的划分直接就是

搞错了!!!

上面两个式子都不成立!!!

正确的是

然后求 函数

(注意那个 的项来自于

考虑两个互质的数的 之积

因为 互质,所以每一对不同的 对应一个唯一的

然而在 中可以注意到 所以 一定是积性函数可以直接证明了

复杂度经过Wolfram Mathematica 算出来是个 的东西

bzoj 讨论中出题人的写法是枚举 的时候符合要求的 是一堆等差数列,可以预处理出来,这部分复杂度有保证是