数学 n个球m个盒的排列组合问题

球是否相同,决定分法
盒是否相同,决定放法
任何情况下,放法*分法就是总方案数

球相同,盒不同,不允许有空盒

Cn1m1C_{n-1}^{m-1}
插板法,n-1个空插m-1个板子分成m份

球相同,盒不同,允许有空盒

Cn+m1m1C_{n+m-1}^{m-1}
先给每个盒子放一个球,再插板,这个球其实是不存在的,再将其抽出,恰好弥补了空盒的情况

球不同,盒相同,不允许有空盒(斯特林数)

dp[n][m]=dp[n1][m1]+dp[n1]mdp[n][m]=dp[n-1][m-1]+dp[n-1]*m
对n个球依次放,并对每一个单独讨论
设为dp[i][j]dp[i][j]是i个不同的球放入j个相同的盒子的种数
对于第i个球,有两种放法
-第i个球单独占一个盒子,方案书就是dp[i1][j1]dp[i-1][j-1]
-第i个球和其他球在一起,方案数就是jdp[i1][j]j*dp[i-1][j]

球不同,盒相同,允许有空盒

和上一种情况差不多dp[n][m1]dp[n][m-1]就相当于空一个盒子的方案数了,所以求和即可
i=1mdp[n][i]\sum_{i=1}^mdp[n][i]

球不同,盒不同,不允许有空盒

dp[n][m]=(dp[n1][m1]+dp[n1][m]m)fact(m))dp[n][m]=(dp[n-1][m-1]+dp[n-1][m]*m)*fact(m))
fact是m的阶乘,对应球不同盒相同的情况,因为盒子不同了,所以有了
放法:fact(m)fact(m),相当于盒子的全排列

球不同,盒不同,允许有空盒

mnm^n
每个球m种方法

球相同,盒相同,不允许有空盒

  • 当n小于m时,很明显无法满足无空盒的情况,方案数是0
  • 当n大于等于m时
    • 如果第n个球单独占一个盒子,方案数时dp[n-1][m-1]
    • 如果第n个球不单独占一个盒子,方案数是dp[n-m][m],相当于先给所有的盒子放一个球的方案
      dp[n][m]={dp[n1][m1]+dp[nm][m]n>=m0n<mdp[n][m]= \begin{cases} dp[n-1][m-1]+dp[n-m][m] & \text{n>=m}\\ 0 &\text{n<m} \end{cases}
      初始条件:dp[k][k]=1dp[k][k]=1

球不同,盒相同,允许有空盒

-当n小于m时,有一个盒子必然是空的,盒子相同空哪个都是一样的,所以方案数是dp[n][m-1]
-当n大于等于m时,可以分为两种情况

  • dp[n][m-1],第m个盒子是空的情况
  • dp[n-m][m],第m个盒子不空的情况
    dp[n][m]={dp[n][m1]+dp[nm][m]n>=mdp[n][m1]n<mdp[n][m]= \begin{cases} dp[n][m-1]+dp[n-m][m] & \text{n>=m}\\ dp[n][m-1] &\text{n<m} \end{cases}
    初始条件:dp[k][1]=1,dp[1][k]=1,dp[0][k]=1dp[k][1]=1,dp[1][k]=1,dp[0][k]=1
posted @ 2020-05-15 10:23  AisingioroHao  阅读(40)  评论(0)    收藏  举报