排列数
从 n 个不同元素种取出 m(m≤n) 个元素的所有不同排列的个数,叫做从 n 个不同元素种取出 m 个元素的排列数,用符号 Amn 表示。
排列数的一些性质
-
Amn=n!(n−m)!
-
nAm−1n−1=(n−1)!⋅n(n−1−m+1)!=n!(n−m)!=Amn
-
mAm−1n−1+Amn−1=m(n−1)!(n−m)!+(n−1)!(n−m−1)!=m(n−1)!+(n−m)(n−1)!(n−m)!=n!(n−m)!=Amn
组合数
从 n 个不同元素种取出 m(m≤n) 个元素的所有不同组合的个数,叫做从 n 个不同元素种取出 m 个元素的组合数,用符号Cmn 表示。
组合数的一些性质
-
Cmn=n!(n−m)!m!
-
Cmn=Cmn−1+Cm−1n−1 可以用动态规划的思想理解
-
Cmn=Cn−mm
-
m∑i=0Cin+i=C0m+C1m+1+C2m+2+...+Crm+r=C1m+C1m+1+C2m+2+...+Crm+r=C1m+2+C2m+2+...+Crm+r=Crm+r+1
-
设Smn=m∑i=0Cin,则Sm+1n=Smn+Cm+1nSmn+1=C0n+1+C1n+1+C2n+1+⋯+Cmn+1=C0n+(C0n+C1n)+(C1n+C2n)+⋯+(Cm−1n+Cmn)=2Smn−Cmn所以如果我们要求多个组合数的前缀和,我们可以类似于莫队的双指针的方式求
-
(x+y)n=n∑i=0Cinxiyn−i
-
n∑i=0Cinxi=n∑i=01n−iCinxi=(1+x)n
-
n∑i=0Cin=n∑i=01i×1n−iCin=(1+1)n=2n
-
n∑i=0(−1)iCin=n∑i=01n−i(−1)iCin=(1+(−1))n=0
-
Cnm+n=n∑i=0CinCim
-
Cmn=nmCn−1m−1
-
n∑i=1Cin⋅i=n∑i=1n!(i−1)!(n−i)!=nn∑i=1(n−1)!(i−1)!(n−i)!=nn−1∑i=0Cin−1=n2n−1
-
n∑i=1Cini2=nn−1∑i=0Cin−1(i+1)=n(n−1∑i=0Cin−1i+n−1∑i=0Cin−1)=n((n−1)2n−2+2n−1)=n(n+1)2n−2
-
n∑i=0(Cin)2=n∑i=0CinCn−in=Cn2n
-
f(n)=n∑i=0(−1)iCing(i)⇔g(n)=n∑i=0(−1)iCinf(i)
-
f(n)=n∑i=0Cing(i)⇔g(n)=n∑i=0(−1)n−if(i)
-
f(n)=m∑i=nCnig(i)⇔g(n)=m∑i=n(−1)i−nCnif(i)
作者:蒟蒻wjr
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?