排列组合问题总结

排列组合

根本思想还是组合数学的加法原则,将一个状态分成几个不相交的状态,然后用加法原则加起来即可

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

如果:n>=m C ( n − 1 , m − 1 ) C(n-1,m-1) C(n1,m1)

否则 n 0 0 0

分析 :

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

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

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

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

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

第二类斯特林数dp[n][m]

dp[n][m]表示n个球 m个盒子的方法数

分两种状态

1.第n个球单独在一个盒子里 有dp[n-1][m-1]

2.第n个球不单独在一个盒子里 有m*dp[n-1][m]

d p [ n ] [ m ] = m ∗ d p [ n − 1 ] [ m ] + d p [ n − 1 ] [ m − 1 ] dp[n][m]=m * dp[n-1][m]+dp[n-1][m-1] dp[n][m]=mdp[n1][m]+dp[n1][m1]

边界条件:

dp[k][k]=1, k>=0

dp[k][0]=0,k>=1

0,n

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

枚举使用箱子的个数即可 此时的dp[n][m]是情况三的第二类的斯特林数

a n s = ∑ i = 0 m d p [ n ] [ i ] ans=\sum_{i=0}^m dp[n][i] ans=i=0mdp[n][i]

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

a n s = d p [ n ] [ m ] ∗ m ! ans=dp[n][m]*m! ans=dp[n][m]m!

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

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

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

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

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

n个球m个盒子,分两种情况

dp[n][m]代表n个球m个盒子允许空箱的个数

两种状态

1.每个盒子至少有一个球 有dp[n-m][m]种情况

2.至少有一个盒子没有球 有dp[n][m-1]种情况

n-m>=0:

d p [ n ] [ m ] = d p [ n ] [ m − 1 ] + d p [ n − m ] [ m ] dp[n][m]=dp[n][m-1]+dp[n-m][m] dp[n][m]=dp[n][m1]+dp[nm][m]

n

d p [ n ] [ m ] = d p [ n ] [ m − 1 ] dp[n][m]=dp[n][m-1] dp[n][m]=dp[n][m1]

8.球同,盒同,无空箱

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

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

你可能感兴趣的:(排列组合问题总结)