组合数学学习笔记2

Stirling 数

第一类斯特林数

\({n\brack m}\) 为第一类斯特林数,表示将 \(n\) 个不同元素划分为 \(k\) 个圆排列的方案数。

有递推式

\[{n\brack m}={n-1\brack k-1}+(n-1){n-1\brack k} \]

第二类斯特林数

\({n\brace m}\) 为第二类斯特林数,表示将 \(n\) 个不同元素划分为 \(k\) 个非空子集的方案数。

有递推式和通项式

\[{n\brace m}={n-1\brace k-1}+k{n-1\brace k}\\ {n\brace m}=\sum_{i=0}^{m} \frac{(-1)^{m-i}i^n}{i!(m-i)!} \]

上升幂和下降幂

上升幂和下降幂的定义

\[x^{\overline{n}}=\prod_{k=0}^{n-1} (x+k)\\ x^{\underline{n}}=\prod_{k=0}^{n-1} (x-k) \]

斯特林数可以把上升/下降幂和普通幂结合起来

\[x^{\overline{n}}=\sum_{k} {n\brack k} x^k\\ x^n=\sum_{k}{n\brace k} (-1)^{n-k} x^{\overline{k}}\\ x^n=\sum_{k} {n\brace k} x^{\underline{k}}\\ x^{\underline{n}}=\sum_{k}{n\brack k} (-1)^{n-k} x^k \]

还有阶乘

\[n^k=\sum_{i=1}^k \binom{n}{i} {k\brace i} i! \]

从上升/下降幂转到普通幂用的是第二类,否则用的是第一类。

关于下降幂和组合数,有一些式子

\[\binom{n}{k} k^{\underline{m}}=\binom{n-m}{k-m} n^{\underline{m}} \]

P4609 [FJOI2016]建筑师

考虑枚举高度为 \(n\) 的建筑放在哪里。这样就把左边和右边切开了,分成独立的两块。我们不妨考虑左边的情况(右边本质是相同的)

\(f(i,j)\) 表示 \(i\) 个建筑,从左向右看能看到 \(j\) 个建筑的方案数。

\[f(i,j)=f(i-1,j-1)+(i-1)\times f(i-1,j) \]

这是第一类斯特林数的递推式。

考虑左右两个答案合并起来。

\[ans=\sum_{i=1}^{n} \binom{n-1}{i-1} {i-1\brack A-1} {n-i\brack B-1} \]

这东西可以变成(具体数学 P221 6.29)

\[ans=\binom{A+B-2}{A-1} {n-1\brack A+B-2} \]

具体理解为把左右两边的圆排列合起来考虑,即 \(n-1\) 个数中选取 \(A+B-2\) 个圆排列,然后分 \(A-1\) 个到左边,\(A+B-2\) 个到右边。

code: https://www.luogu.com.cn/record/46537669

CF932E Team Work

\[\begin{aligned} ys &= \sum_{i=1}^{n} \binom{n}{i} \sum_{j=1}^{k} {k\brace j} j! \binom{i}{j} & 幂\to阶乘\\ &= \sum_{j=1}^{k} {k\brace j} j! \sum_{i=j}^{n} \binom{n}{i} \binom{i}{j} & 交换求和号\\ \binom{n}{i} \binom{i}{j} &= \frac{n! i!}{i! (n-i)! j! (i-j)!}\\ &= \frac{n!}{(n-j)! j!} \frac{(n-j)!}{(n-i)! (i-j)!}\\ &= \binom{n}{j} \binom{n-j}{n-i}\\ ys &= \sum_{j=1}^{k} {k\brace j} j! \binom{n}{j} \sum_{i=j}^{n} \binom{n-j}{n-i} & 提一个组合数出去\\ &= \sum_{j=1}^{k} {k\brace j} j! \binom{n}{j} \sum_{i=0}^{j} \binom{n-j}{n-j-i}\\ &= \sum_{j=1}^{k} {k\brace j} j! \binom{n}{j} 2^{n-j} & 下指标求和 \end{aligned} \]

code: https://codeforces.com/contest/932/submission/107314924

CF1278F Cards

\[\begin{aligned} E(x)^k &= E(x^k)\\ &= \sum_{i=0}^{n} i^k \binom{n}{i} \frac{1}{m^i} \frac{(m-1)^{n-i}}{m^{n-i}}\\ &= \frac{1}{m^n} \sum_{i=0}^{n} \binom{n}{i} i^k (m-1)^{n-i}\\ &= \frac{1}{m^n}\sum_{j=0}^{k} {k\brace j} j! \binom{n}{j} \sum_{i=0}^{n} \binom{n-j}{n-i-j}(m-1)^{n-i-j} & 同上题\\ &= \frac{1}{m^n}\sum_{j=0}^{k} {k\brace j} j! \binom{n}{j} m^{n-j} & 二项式定理 \end{aligned} \]

code: https://codeforces.com/contest/1278/submission/107342990

P6620 [省选联考 2020 A 卷] 组合数问题

一个和下降幂无关的做法

\[\begin{aligned} ys &= \sum_{k=0}^{n} \sum_{i=0}^{m} a_ik^{i} x^k \binom{n}{k}\\ &= \sum_{i=0}^{m} a_i \sum_{k=0}^{n} x^k k^i \binom{n}{k}\\ &= \sum_{i=0}^{m} a_i \sum_{j=1}^{i} {i\brace j} j! \binom{n}{j} \sum_{k=0}^{n-j} \binom{n-j}{k} x^{j+k} & 同上题\\ &= \sum_{i=0}^{m} a_i \sum_{j=1}^{i} {i\brace j} j! \binom{n}{j} x^{j} \sum_{k=0}^{n-j} \binom{n-j}{k} x^{k}\\ &= \sum_{i=0}^{m} a_i \sum_{j=1}^{i} {i\brace j} j! \binom{n}{j} x^{j} (x+1)^{n-j} \end{aligned} \]

不过里面有组合数,不大好处理……考虑用公式把阶乘乘上组合数换成下降幂就行了。但其实我们 overcomplicate 了这个问题。如果一开始就用下降幂会更好(上题应该一样)

我们有多项式转下降幂多项式

\[b_i=\sum_{j=i}^{m} {j\brace i} a_j\\ f(x)=\sum_{i=0}^{m} b_i x^{\underline{i}} \]

\[\begin{aligned} ys &= \sum_{i=0}^{m} b_i \sum_{k=i}^{n} x^k k^{\underline{i}} \binom{n}{k} & 转下降幂多项式\\ &= \sum_{i=0}^{m} b_i \sum_{k=i}^{n} x^k n^{\underline{i}} \binom{n-i}{k-i} & 下降幂与组合数\\ &= \sum_{i=0}^{m} b_i n^{\underline{i}} x^{i} \sum_{k=0}^{n-i} x^{k} \binom{n-i}{k-i}\\ &= \sum_{i=0}^{m} b_i n^{\underline{i}} x^{i} (x+1)^{n-i} \end{aligned} \]

其实两种解法本质没有什么不同,只不过第一种中,下降幂用阶乘乘上一个组合数表示了,所以看上去会复杂一些。

code: https://www.luogu.com.cn/record/46669969

CF961G Partitions

学校里推的式子,又因为懒得打latex,就先鸽着(?

code: https://codeforces.com/contest/961/submission/108261256

P4827 [国家集训队] Crash 的文明世界

感觉很厉害的一道题目。

首先题目中有一个非常不好的 \(k\) 次方。我们可以转化成:

\[d(i,j)^k=\sum_{i=0}^{k} {k\brace i} \binom{x}{i} i! \]

于是有:

\[\begin{aligned} s(u) &= \sum_{v=1}^{n} \sum_{i=0}^{k} {k\brace i} \binom{d_{u,v}}{i} i!\\ &= \sum_{i=0}^{k} i! {k\brace i} \sum_{v=1}^{n} \binom{d_{u,v}}{i}\\ \end{aligned} \]

考虑用换根 DP 求出后面那个组合数求和。设 \(f(u,t)\) 表示 \(u\) 子树内的 \(\binom{d_{u,v}}{t}\) 之和。关于组合数的转移,我们有加法公式,所以可以:

\[f(u,t)=\sum_{v\in son_u} f_{v,t}+f_{v,t-1} \]

然后是换根。\(g(v,t)\) 表示子树外的和。父亲的贡献为 \(g(u,t)+g(u,t-1)\),兄弟的贡献为 \(f(u,t)+f(u,t-1)-(f(v,t)+2f(v,t-1)+f(v,t-2))\)

\[f(v,t)=g(u,t)+g(u,t-1)+f(u,t)+f(u,t-1)-(f(v,t)+2f(v,t-1)+f(v,t-2)) \]

然后 DP 好之后统计一下答案即可。

https://www.luogu.com.cn/record/47104122

SP106 BINSTIRL

第二类斯特林数的奇偶性……

考虑斯特林数的递推式

\[\begin{aligned} {n \brace m} &= {n-1 \brace m-1} + m {n-1 \brace m}\\ &\equiv {n-1 \brace m-1} + [2 \not\mid m] {n-1 \brace m}\\ \end{aligned} \]

考虑画出转移图。每一个点都可以斜着向右上走,但是只有 \(m\) 为偶数的时候才可以向右走。即求最终的路径方案数的奇偶性。考虑用组合数计算,我们要有 \(m\) 次向右上走,\(n-m\) 次向右走。一共有 \(n-m\) 个机会向右上转移,\(r=\lfloor \frac{m+1}{2} \rfloor\) 个机会向右转移。那么用组合数即可计算出结果

\[\binom{n-m+r-1}{r-1} \]

然后根据组合数的结论

\[\binom{n}{m}\equiv[(n \operatorname{bitwise and} m)= m] \pmod 2 \]

code: https://www.luogu.com.cn/record/47131333

posted @ 2021-02-13 13:32  LarsWerner  阅读(155)  评论(0编辑  收藏  举报