关于 计数题 的一些认识

爱数数的人上大学了,所以计数题就多了

建议先练习好小球与盒子的计数

\(CSP\) 前学会求组合数的多种方法,\(O(n^2)\) 求斯特林数。

省选前学好 \(NTT\)

计数题首先要知道怎么判断不同,一般都很显然,不显然的话题目里应该也会说。

有的时候需要找找性质,转化一下等价的判别不同的方法。

通常会使用 \(DP\) 求解,把会造成不同的情况放到数组的,然后考虑不同之间的转移。

经常用到的东西:组合数,斯特林数,NTT等。

组合数

组合数可以用杨辉三角 \(n^2\) 递推来求,不用考虑模数是否是质数。

当模数是大质数(不会用到大于等于mod的数的阶乘)的时候,可以预处理阶乘及其逆元,然后 \(O(1)\) 来求。

如果是小质数,可以先预处理小于mod的数的阶乘,然后考虑卢卡斯定理。

如果出题人很毒瘤,模数不是质数,但质因数分解后每个质数的指数都是1,就可以考虑用上边的方法对分解出来的指数求解,然后用中国剩余定理合并答案。例子

如果出题人更毒瘤,模数不是质数,质因数分解后每个质数的指数不一定都是1,那么可以考虑扩展卢卡斯。

斯特林数

分第一类和第二类。常用到第二类,也是小球与盒子的模型的一种。

可以用 \(n^2\) 递推,不用考虑模数是否是质数。

当模数是 \(NTT\) 模数的时候,可以用 \(NTT\) 来求,但通常只用来求第二类斯特林数·行,由 \(O(n^2)\) 变成了 \(O(nlogn)\)

NTT

常用来优化卷积,有的时候还会用到分治 \(NTT\) ,分两种,一种是洛谷模板,另一种是多个小多项式合并

错排

\(ans[i]\)\(i\) 个数的错排问题。

那么考虑第 \(i\) 放在 \(j\) 的位置,一共有 \(i-1\) 种选择。

如果 \(j\) 放在了 \(i\) 的位置,那么问题规模缩小 \(2\) ,有 \(ans[i-2]\) 种方案。

否则剩下的 \(i-1\) 个数都有一个不能放的位置,有 \(ans[i-1]\) 种方案。

所以 \(ans[i]= (i-1) \times (ans[i-1]+ans[i-2])\)

实在不会的话可以直接背

卡特兰数

有一些神奇的性质。

求法一:\(\displaystyle f[n]=\sum_{i=0}^{n-1}f[i] \times f[n-i-1]\)

求法二:\(\displaystyle f[n]=\frac{C_{2n}^{n}}{n+1}\)

应用:括号计数,出栈次序,凸多边形三角划分,二叉搜索树计数。

其他

n个点的无根树有 \(n^{n-2}\) 种,有根数有 \(n^{n-1}\) 种,证明需要学习prufer序列的相关知识

posted @ 2020-06-15 06:33  wljss  阅读(208)  评论(0编辑  收藏  举报