标签:组合 cat 方法 取整 多项式 多少 乘法 原理 一个人
从\(n\)个不同的元素中取出\(m\)个的方案数,记为\(A(n,m)\)或\(P(n,m)\)
\[P(n,m)=\frac{n!}{(n-m)!}\]
从\(n\)个相同的元素中取出\(m\)个的方案数,记为\(C(n,m)\)
\[C(n,m)=\frac{n!}{m!(n-m)!}\]
\[C(n,m)=C(n-1,m)+C(n-1,m-1)\]
用\(m-1\)个相同隔板把\(n\)个相同元素分成\(m\)部分(可以有两个隔板插在同一个空隙)
方案数:\[C(n+m-1,m-1)=C(n+m-1,n)\]
一个序列有n个0和n个1,保证每个1之前必有1个0的方案数为C(n)
递推式:(注意:括号里只有一个元素的是Catalan数,有两个元素的是组合数)
\[C(n)=C(0)*C(n-1)+C(1)*C(n-2)+...+C(n-1)*C(0)\]
\[C(n)=C(n-1)*(4*n-2)/(n+1)\]
\[C(n)=C(2n,n)/(n+1)\]
\[C(n)=C(2n,n)-C(2n,n-1)\]
把\(n\)个元素摆成\(m\)个圆排列的方案数,记为\[s(n,m)\]
递推式:\[s(n,m)=s(n-1,m-1)+(n-1)*s(n-1,m)\]
把\(n\)不同的球放在\(m\)个相同的盒子(无空盒)里的方案数,记为\[S(n,m)\]
递推式:\[S(n,m)=S(n-1,m-1)+m*S(n-1,m)\]
引入:砝码称重问题
有1g砝码5个,2g砝码3个,5g砝码2个。相同质量的砝码完全相同。问有多少种能称出15g的方案?
解:
很容易想到暴力枚举每一种可能的称量方案,但是时间复杂度为\(O(n^n)\)级别,计算机无法承受。于是我们引入母函数的概念。设\(G(x)\)为母函数,对于1g的砝码能称出的不同重量,我们用多项式表示为\[(x^1+x^2+...+x^{15})\]同理,2g砝码能表示为\[(x^2+x^4+...+x^{14})\]5g砝码能表示为\[(x^5+x^{10}+x^{15})\]
于是\[G(x)=(x^1+x^2+...+x^{15})(x^2+x^4+...+x^{14})(x^5+x^{10}+x^{15})\]
经过化简,求出\(x^{15}\)的系数,即为答案。
由于只需化简多项式,母函数的时间复杂度仅为\(O(n^3)\),空间复杂度为\(O(n)\),得到巨大提升。
使用fft可以进一步优化。
递推式:\[f[n]=(n-1)*(f[n-1]+f[n-2])\]
当 \(n\) 很大时, \(f[n] \approx \frac{n!}{e}\)
证明:
\[N=m^n\]
根据乘法原理可得。
(1) \(n>=m\)
\[N=m!*S(n,m)\]
球不同,盒相同的方案数\(\times m!\)
(2) \(n<m\)
\[N=0\]
\[N=S(n,1)+S(n,2)+...+S(n,m)\]
因为允许空盒,所以球可以只放在\(m\)个盒中的\(1\)个或\(2\)个或...或\(m-1\)个盒中
(1) \(n>=m\)
\[N=S(n,m)\]
由第二类斯特林数的定义。
(2) \(n<m\)
\[N=0\]
\[N=C(m+n-1,n)\]
插板法,即把\(n\)个球用\(m-1\)个隔板分成\(m\)部分。
(1) \(n>=m\)
\[N=C(n-1,m-1)\]
先在每个盒子里放一个球,方案数为\(1\);再对剩下的\(n-m\)个球用隔板法,即把\(n-m\)个球用\(m-1\)个隔板分成\(m\)部分。
(2) \(n<m\)
\[N=0\]
(1) \(n>=m\)
我们发现,当\(n=5,m=3\)时的方案为:
5 0 0
4 1 0
3 2 0
3 1 1
2 2 1
共\(5\)种方案。
我们发现,问题可以转化为:把正整数\(n\)分解成不超过\(m\)个自然数的方案数。如果暴力dfs,时间复杂度为\(O(\)爆炸\()\)。竟然还有70分
有一个重要结论:把正整数\(n\)分解成不超过\(m\)个自然数的方案数,等于把正整数\(n\)分解成若干个\(\le m\)的自然数的方案数。这个定理的证明方法,请自行百度。(我也不会)
我们考虑使用母函数:对于分解出的每个\(\le m\)的整数\(i\),我们用多项式表示为\[(x^i+x^{2i}+...+x^{floor(\frac{n}{i})*i})\]
此处\(floor(x)\)表示\(x\)向下取整。
于是,母函数\(G(x)\):\[G(x)=\prod_{i=1}^{m}(x^i+x^{2i}+...+x^{floor(\frac{n}{i})*i})\]
求出\(x^n\)的系数即可。
(2) \(n<m\)
(1) \(n>=m\)
母函数\[G(x)=\prod_{i=1}^{m}(x^i+x^{2i}+...+x^{floor(\frac{n}{i})*i})\]
中\(x^{n-m}\)的系数。
(2) \(n<m\)
\[N=0\]
标签:组合 cat 方法 取整 多项式 多少 乘法 原理 一个人
原文地址:https://www.cnblogs.com/BlogOfchc1234567890/p/11694668.html