排列组合 "n个球放入m个盒子"问题 总结

算法:

HDU - 6397 Character Encoding 插板法+容斥原理  https://blog.csdn.net/xiang_6/article/details/81868989

[ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子)  https://blog.csdn.net/sr_19930829/article/details/38293297

m个相同的bean和n棵不同的树,每棵树可以放也可以不放beans  https://blog.csdn.net/moon_sky1999/article/details/81835284

n个球放入m个盒子,使用程序输出所有的放法?   https://www.zhihu.com/question/51448931

 

 

 

1、球同,盒同,盒不可以为空  Pm(N)--这符号表示部分数为m的N-分拆的个数,m是P的下标,为了好看我将大写的M弄成小写
2、球同,盒同,盒可以为空    Pm(N+M)--为什么要加M,与4为什么要在3的基础上加M是一样的,就是为了保证不为空
3、球同,盒不同,盒不可以为空  C(N-1, M-1)
4、球同,盒不同,盒可以为空   C(N+M-1, M-1)
5、球不同,盒同,盒不可以为空  S(N, M) --第二类斯特林数
6、球不同,盒同,盒可以为空   S (N, 1) + S(N, 2) + S(N, 3) + ... + S(N, M)
7、球不同,盒不同,盒不可以为空  M! * S(N, M)
8、球不同,盒不同,盒可以为空 M^N  --表示M的N次方

1.球同,盒不同,无空箱

C(n-1,m-1), n>=m
0, n

使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空箱子,所以只要在n-1个间隙选出m-1个间隙即可

 

 

2.球同,盒不同,允许空箱

C(n+m-1,m-1)

我们在第1类情况下继续讨论,我们可以先假设m个盒子里都放好了1个球,所以说白了就是,现在有m+n个相同的球,要放入m个不同的箱子,没有空箱。也就是第1种情况

 

 

3.球不同,盒相同,无空箱

第二类斯特林数dp[n][m]
dp[n][m]=m*dp[n-1][m]+dp[n-1][m-1],1<=m dp[k][k]=1,k>=0
dp[k][0]=0,k>=1
0,n

这种情况就是第二类斯特林数,我们来理解一下这个转移方程。

对于第n个球,如果前面的n-1个球已经放在了m个箱子里,那么现在第n个球放在哪个箱子都是可以的,所以m*dp[n-1][m];

如果前n-1个球已经放在了m-1个箱子里,那么现在第n个球必须要新开一个箱子来存放,所以dp[n-1][m-1]

其他的都没法转移过来

 

 

 

4.球不同,盒相同,允许空箱

sigma dp[n][i],0<=i<=m,dp[n][m]为情况3的第二类斯特林数

这种情况就是在第3种情况的前提下,去枚举使用的箱子的个数

 

 

 

5.球不同,盒不同,无空箱

dp[n][m]*fact[m],dp[n][m]为情况3的第二类斯特林数,fact[m]为m的阶乘

因为球是不同的,所以dp[n][m]得到的盒子相同的情况,只要再给盒子定义顺序,就等于现在的答案了

 

 

6.球不同,盒不同,允许空箱

power(m,n) 表示m的n次方

每个球都有m种选择,所以就等于m^n

 

 

7.球同,盒同,允许空箱

dp[n][m]=dp[n][m-1]+dp[n-m][m], n>=m
dp[n][m]=dp[n][m-1], n 边界dp[k][1]=1,dp[1][k]=1,dp[0][k]=1

现在有n个球,和m个箱子,我可以选择在所有箱子里面都放上1个球,也可以不选择这个操作。

如果选择了这个操作,那么就从dp[n-m][m]转移过来

如果没有选择这个操作,那么就从dp[n][m-1]转移过来

 

 

 

8.球同,盒同,无空箱

dp[n-m][m],dp同第7种情况,n>=m
0, n

因为要求无空箱,我们先在每个箱子里面放1个球,然后还剩下n-m个球了,再根据情况7答案就出来了

 

 

对以上1,2,5,6,7,8公式作解释说明,3,4不用解释了,插板法
先说:
8、球不同,盒不同,盒可以为空 M^N 
不妨设这N个小球为a1 , a2 ,…,an  .首先把a1 放进盒子里,因为M个盒子是不同的,所以有M种放法,同理,a2 ,…,an放进盒子里都有M种放法,依乘法原则知不同的方案数 N  = M*M*。。。M(共N个)=M^N

例8-1:8个不同的球放进3个不同的盒子里,有几种方法?

每个球都有3种选择,8个球就有3^8=6561


例8-2:某单位今年新进了3 个工作人员,可以分配到3 个部门,但每个部门至多只能接收2 个人,问:共有几种不同的分配方案?
A.12       B.16     C.24     D.以上都不对
3^3-3=24

--------------------------------------------------------------------
接下来说:

1、球同,盒同,盒不可以为空  Pm(N)
2、球同,盒同,盒可以为空    Pm(N+M)
----------------------------------------------
首先要记得:
P1(n)=1 , Pn(n)=1, Pn-1(n)=1
P2(n)=[n/2]  --[]表示不超过n/2的最大整数
Pn+1(n)=0 --或者表示没意义,因为n个球要放到n+1个盒子中,又不允许为空,没意义。
公式:Pm(N)=P1(N-m)+P2(N-m)+P3(N-m)+......+Pm(N-m) ------(共M项)


有人可能会说上面这几个都难得记,你只要明白拆分或结合实际意思就容易知道了,比如Pn(n)=1,n个球放n个盒子,每个盒子又不能为空,肯定只有1种。
--------------------------------------------------------------------------------
例2-1:7个相同球放入4个相同盒子,每盒至少一个,有多少种放法?
方法一,公式法。
代入公式:Pm(N)=P1(N-m)+P2(N-m)+P3(N-m)+......+Pm(N-m)
P4(7)=P1(3)+P2(3)+P3(3)-------P4(3),没意义省去
=1+1+1
=3,故有3种


方法二,拆数法。
1、先每个盒子放一个,还剩下3个球;
2、把“3”这个数拆成4个数(因为4个盒子)有如下:
3000  2100 1110---------拆数时不考虑顺序
---------------------------------------------------------------------------------------
例1-1:7个相同球放入4个相同盒子,可以空盒,有多少种放法?

方法一,公式法。
代入公式:Pm(N)=P1(N-m)+P2(N-m)+P3(N-m)+......+Pm(N-m)
P4(7+4)= P4(11)
=P1(7)+P2(7) +P3(7) +P4(7)
=1+3+(P1(4)+ P2(4)+ P3(4))+( P1(3)+ P2(3)+ P3(3)+ P4(3))
=1+3+(1+2+1)+(1+1+1+0)
=4+4+3
=11,故有11种


方法二,拆数法。
1、先借4个球来,每个盒子放一个,还剩下7个球;
2、把“7”这个数拆成4个数(因为4个盒子)有如下:
0007  0016 0025 0034 0115 0124 0133 0223 1114 1123 1222

--------------------------------------------------------------------------------
例2-2:10个相同的小球放进5个相同的盒子,使得无一空盒,共有多少种放法?
解析:
10个放了5个,还有5个。
5个放到1个盒,放到2个盒,放到3个盒。。。。放到5个盒,列式:
P5(10)
=P1(5)+P2(5)+P3(5)+P4(5)+P5(5)

=1+2+[P1(2)+P2(2)]+1+1
=1+2+[1+1]+1+1
=7
--------------------------------------------------------------------------------
最后来说复杂的:
5、球不同,盒同,盒不可以为空  S(N, M)
6、球不同,盒同,盒可以为空   S (N, 1) + S(N, 2) + S(N, 3) + ... + S(N, M)
7、球不同,盒不同,盒不可以为空  M! * S(N, M)
--------------------------------------------------------------------------------


S2(N ,M)

1

2

3

4

5

6

7

8

9

1

1
               

2

1

1
             

3

1

3

1
           

4

1

7

6

1
         

5

1

15

25

10

1
       

6

1

31

90

65

15

1
     

7

1

63

301

350

140

21

1
   

8

1

127

966

1701

1050

266

28

1
 

9

1

255

3025

7770

6951

2646

462

36

1


上面就是传说的:第二类斯特林数(第二类Stirling数)----可以百度下
S(N, M)表示什么意思呢?就是第N行M列的数字,例如S(7, 3) 就是第7行第3个数字。
--------------------------------------------------------------------------------

5-1:8个不同的球放进3个相同的盒子里,每盒至少一个,有几种方法?

公式法:S(N, M)=S(8, 3)。第8行的第3列,对着表格找相应的数为966

--------------------------------------------------------------------------------

6-1:8个不同的球放进3个相同的盒子里,有几种方法 ?

公式法: S(8,3)=S (8, 1) + S(8, 2) + S(8, 3)=1+127+966=1094。即为第8行前3列的和。

注:这种类型结合第8种更简单些,在例8-1中,3个元素都相异,比如116,一共有6种排列(球是不同的),此问中,盒子是相同的,因此这6种排列都只算一种情况。 但如果2个元素相同的时候,有且只有 008,只有3种排列,我们多添加3种进去,令其也重复6次,则(6561+3)就是所有的情况都重复了6次,(6561+3)/6=1094即为所求。

--------------------------------------------------------------------------------

7-1:8个不同的球放进3个不同的盒子里,每盒至少一个,有几种方法 ?

公式:M! * S(N, M)=3!*S(8, 3)=6*966=5796
7-2:4名教师分派到3所中学任教,每所至少1名教师,则有不同的分派方案多少种?
公式:M! * S(N, M)=3!*S(4, 3)=6*6=36

--------------------------------------------------------------------------------

现在剩下怎么记上面这个表格了,其实记这个表格非常简单:

1、先写好行号1---9和列号1---9。

2、然后前3个数字写1。

4、左右两边都是1,第几行就有几个数,比如第5行就是1XXX1。

5、 S(r, c) = S(r-1,c-1) + c * S(r-1, c),含义是第r排的第c个数等于他上一排的上一个位置数字加上一排的同样位置数字的c倍(对着上表的行号和列号看,很容易记)。r=row,c=column.

例如S(7, 3) 就是第7排第3个数字,所以他等于上排第6排第2个数字+第6排第3个位置*3。

所以画图的话,明显第1排是1,第2排1,1,推理第3排(左右两边都是1,只有中间那个数字没确定)。

所以 S(3, 2) = 第2排第1个数字+第2排第2个数字*2 = 1+1*2 = 3,所以第3排数字就是1,3,1。同理 S(4, 2) = S(3, 1)+ 2S(3, 2) = 1+2*3 = 7, ... 如此类推。

--------------------------------------------------------------------------------


四、练习题
1、8个相同的球放进4个相同的盒子里,每盒至少一个,有几种方法  ?
2、8个相同的球放进4个不同的盒子里,每盒至少一个,有几种方法  ?
3、8个不同的球放进4个不同的盒子里,每盒至少一个,有几种方法  ?
4、8个不同的球放进4个相同的盒子里,每盒至少一个,有几种方法 ?
5、8个相同的球放进4个相同的盒子里,有几种方法 ?
6、8个相同的球放进4个不同的盒子里,有几种方法  ? 
7、8个不同的球放进4个不同的盒子里,有几种方法 ?  
8、8个不同的球放进4个相同的盒子里,有几种方法  ?


9、8个不同的球平均分给4个小朋友,有几种分法  ?
10、8个不同的球平均分成4堆,有几种分法  ?
--------------------------------------------------------------------------------
下面是我做的,不一定是正确答案,大家可以先做了对一下结果,不同再讨论下:

1、8个相同的球放进4个相同的盒子里,每盒至少一个,有几种方法  ?
公式:球相同,盒相同,拆分公式。
P4(8)=P1(4)+P2(4)+P3(4)+P4(4)
=1+2+1+1
=5

2、8个相同的球放进4个不同的盒子里,每盒至少一个,有几种方法  ?
公式:球相同,盒不同,插板法。
C(8-1,4-1)
=C(7,3)
=7*6*5/6
=35

3、8个不同的球放进4个不同的盒子里,每盒至少一个,有几种方法  ?
公式:球不同,盒不同,不为空,阶乘和二类斯特林数,球是行号,盒子是列号。
M!*S(N,M)
=4! * S(8,4)
=24*1701
=40824


4、8个不同的球放进4个相同的盒子里,每盒至少一个,有几种方法 ?
公式:球不同,盒同,二类斯特林数,为空是累加,不为空是直接取数,球是行号,盒子是列号。
S(N,M)
=S(8,4)
=1701

5、8个相同的球放进4个相同的盒子里,有几种方法 ?
公式:球同,盒同,为空,拆分公式。
P4(8+4)=P4(12)
=P1(8)+P2(8)+P3(8)+P4(8)
=1+4+(P1(5)+P2(5)+P3(5))+(P1(4)+P2(4)+P3(4)+P4(4))
=1+4+(1+2+(P1(2)+P2(2))+(1+2+1+1)
=1+4+5+5
=15


6、8个相同的球放进4个不同的盒子里,有几种方法  ?
公式:球同,盒不同,插板法。
C(11,3)
=11*10*9/6=15*11=165

7、8个不同的球放进4个不同的盒子里,有几种方法 ?
公式:球不同,盒不同,为空,直接是M^N
4^8=4^4*4^4=2^8*2^8=256*256=65536

8、8个不同的球放进4个相同的盒子里,有几种方法  ?
公式:球不同,盒同,二类斯特林数,为空,是累加
S (N, 1) + S(N, 2) + S(N, 3) + ... + S(N, M)
=S(8,1)+S(8,2)+S(8,3)+S(8,4)
=1+127+966+1701
=2795


9、8个不同的球平均分给4个小朋友,有几种分法  ?
从8个球中取2个分给第1个小朋友,从剩下6个中取2个来分给第二个小朋友。。。
C(8,2)*C(6,2)*C(4,2)*C(2,2) = 2520


10、8个不同的球平均分成4堆,有几种分法  ?
C(8,2)*C(6,2)*C(4,2)*C(2,2) / 4!= 2520/24 =105

你可能感兴趣的:(生涯)