排列组合专题
里面会讲组合数的定义 组合数的递推公式 组合数的各种奇怪公式 抽屉原理 范德蒙德卷积 错排 圆排 球盒问题 然后会把oiwiki上之前学的再整理一下
错排问题
错排问题是指1,2,。。。,n这些数重新排列,使得每一个数都不在它原来的位置上,求排列种数
递推处理:
设n个元素重新错排的个数为\(d(n)\)
那么第一个元素可以放在不是第一个位置的任何位置,有\(n-1\)种
放了第一个元素后,还剩\(n-1\)个元素,但是n-1个元素不能直接调用\(d(n-1)\)
因为\(2……n\)并不是按照原位置放置的,被第一个元素隔开了,eg
当1放在第三个位置时,\(n=4\),左边是4 2,右边是3,那么是错排,但是2
在原位
所以应该分类讨论
因为我把第一个元素放在后面的位置,那么后面那个位置上的数就不能放在那了,那么那个数该放在哪呢?
1.那个数在第一个位置,这样的话还剩\(n-2\)个元素,而只是交换了那两个元素,其它元素还在那些位置间,所以这n-2个元素必须错排,\(d(n-2)\)
2.那个数不在第一个位置,这样的话我先把那个数放在第一个位置,这样有\(n-1\)个元素(除去第一个已经放好),然后错排这\(n-1\)个数,因为还是只是交换了这两个数,所以可以错排
这样的话,错排后那个元素既不在第一个,也不在原来的位置,\(d(n-1)\)
因为是选定第一个元素的位置后,然后有多少种方法
所以\(d(n)=(n-1)*(d(n-1)+d(n-2))\)
\(d(1)=0\)
\(d(2)=1\)
还有近似公式\(d(n)=ceil(n!/e)\)
一般\(e\)取\(2.72\)
但是仅用于选择题且每一项相差很大
容斥原理
\(D(n)=n!(1/2!-1/3!+1/4!+...+(-1)^n/n!)\)
考虑倒扣,\(n!\)是所有排列个数,扣掉存在在自己位置的,也就是扣掉1在自己位置的个数,2在自己位置的个数,...,n在自己位置的个数,然后又扣多了,要加上1 2都在自己位置的个数,1 3都在自己位置的个数...,2 3都在自己位置的个数...,然后又加多了,扣掉1 2 3都在自己位置个数,1 2 4都在自己位置个数...,2 3 4在自己位置个数...,......,直到n个全处理完
也就是\(n!\)减去\(C(n,1)(n-1)!-C(n,2)(n-2)!+C(n,3)(n-3)!+...+(-1)^{n-1}C(n,n)(n-n)!\)
=\(n!-n!/2!+n!/3!+...+(-1)^{n-1}n!/n!\)
减掉之后是
\(n!/2!-n!/3!+n!/4!+...+(-1)^nn!/n!\)
\(=n!(1/2!-1/3!+1/4!+...+(-1)^n/n!)\)
\(QED\)
圆排列
\(A({n,m}) /m\)
如
3个数1 2 3
围成一圈个数
圈说明可以通过旋转来得到不同的排列,这样有些序列上不同的排列在圈上是相同的
注意这里旋转是一个固定的方向顺时针或者逆时针

注意方向要确定
如果方向不确定,也就是既可以顺时针旋转,也可以逆时针选择,那么\(A ({n,m}) /2m\)
组合数递推
\(O(n)\)递推:
$C (n ,m)=C(n ,n-m) $
\(C ( n, k)=C (n-1, k-1 ) * (n/k)\)
\(O(n^2)\)递推:
\(C (n ,m)=C (n-1 ,m-1 )+ C (n-1, m)\)
\(C( n, 0)=1\)
\(m>n时C(n,m) =0\)
\(C(0, 0) =1\)
抽屉原理(狄利克雷原理)
\(n\)个数放入\(m\)个抽屉
至少有一个抽屉中至少有\(ceil(n/m)\)个数
球盒问题
题目:
https://www.luogu.com.cn/problem/P1025
\(n\)个球
\(m\)个盒子
有多少种放法
所有排列组合的模型
1球同,盒不同,无空箱
插板法
\(n-1\)个空
插\(m-1\)个板子
\(C(n-1,m-1)\) 前提n≥m
\(n<m\)时为\(0\)
2球同盒不同有空箱
插板法
有空箱的话就在每个箱子里先假装放一个球
然后这样每个箱子都至少一个球,转化成了第一个问题
\(n+m-1\)个空,\(m-1\)个板子
所以无论\(n\),\(m\)大小关系,都是\(C(n+m-1,m-1)\)
3球不同,盒同,无空箱
递推问题
\(f(n,m)=m*f(n-1,m)+f(n-1,m-1)\)前提是\(1<=m<n\)
边界\(f(n,n)=1\)当\(n>=0\)时(\(n>=0\)因为0个箱子0个球是一种,因为没球所以算一种)
\(f(n,0)=0\)当\(n>=1\)时(为了与上一个边界不重复所以\(n>=1\))
当\(m>n\)时\(f\)值为\(0\)
前面的\(n-1\)个数已放在\(m\)个箱子里,再放最后一个数,可以放在\(m\)个箱子中任意一个,所以有\(m\)种
这里是乘法原理,所以为\(m*f(n-1,m)\)
若前面\(n-1\)个球已放在\(m-1\)个箱子里,则最后一个球只能放在最后一个箱子里,否则会空出箱子
所以有一种,根据乘法原理,\(1*f(n-1,m-1)\)种
再根据加法原理把\(m*f(n-1,m)\)和\(f(n-1,m-1)\)加起来就是总数
\(n\)个箱子\(n\)个球时由于箱子相同
所以无论怎么放都只有\(1\)种
\(0\)个箱子时相当于没放,有\(0\)种
\(m>n\)时不可能不空箱子,\(0\)种
4球不同盒同有空箱
其实是分类讨论
空\(0\)个箱子\(1\)个箱子….到空\(n-1\)个箱子的种数的和
所以又转化成了第三个问题
所以
\(f(n,m)=m*f(n-1,m)+f(n-1,m-1)\)前提是\(1<=m<n\)
边界\(f(n,n)=1\)当\(n>=0\)时(\(n>=0\)因为0个箱子0个球是一种,因为没球所以算一种)
\(f(n,0)=0\)当\(n>=1\)时(为了与上一个边界不重复所以\(n>=1\))
当\(m>\)n时\(f\)值为\(0\)
但\(m\)从\(m\)一直到\(1\)都要计算一遍并求和
5球不同盒不同无空箱
没有空箱,
所以转化成了第三个问题
\(f(n,m)=m*f(n-1,m)+f(n-1,m-1)\)前提是\(1<=m<n\)
边界\(f(n,n)=1\)当\(n>=0\)时(\(n>=0\)因为0个箱子0个球是一种,因为没球所以算一种)
\(f(n,0)=0\)当\(n>=1\)时(为了与上一个边界不重复所以\(n>=1\))
当\(m>n\)时\(f\)值为\(0\)
但最后要把\(f(n,m)\)乘上\(m!\)
因为箱子不同所以箱子有顺序,所以箱子的全排列有\(m!\)个
所以\(f(n,m)*m!\)为答案
6球不同盒不同有空箱
不用用递推了
太麻烦了
直接\(m^n\)
因为每个球有\(m\)种选择,而允许空箱,所以\(n\)个球的每个球有\(m\)种选择,把\(m\)连乘\(n\)个就是\(m^n\)
7球同盒同无空箱
其实就是自然数拆分问题
\(m\)个数使和为\(n\),每个数均为正整数,有多少方法?
写过了
\(f(n,m)=f(n-1,m-1)+f(n-m,m)\)
\(f(n,n)\)时为\(1\)
\(f(n,1)\)时为\(1\)
\(m>n\)时为\(0\)
8球同盒同有空箱
分类讨论
转化为第七个问题
\(f(n,m)=f(n-1,m-1)+f(n-m,m)\)
\(f(n,n)\)时为\(1\)
\(f(n,1)\)时为\(1\)
\(m>n\)时为\(0\)
但\(m\)要从\(m\)一直到\(1\)
所以把这些\(m\)代入公式求和即可