球盒问题
n个球放入m个盒子里一共是八种情况:
1.球相同 盒不同 无空箱
①
a
n
s
=
C
(
n
−
1
,
m
−
1
)
(
n
>
=
m
)
②
a
n
s
=
0
(
n
<
m
)
① ans=C(n-1,m-1) (n>=m)\\ ② ans=0 (n<m)
①ans=C(n−1,m−1)(n>=m)②ans=0(n<m)
可以用插板法,n 个球中总共有 n-1 个空隙,根据条件,我们只需要在 n−1 个空隙中插 m-1 个板子即可。
2.球相同 盒不同 允许空箱
a
n
s
=
C
(
n
+
m
−
1
,
m
−
1
)
ans=C(n+m-1,m-1)
ans=C(n+m−1,m−1)
既然允许有空盒,那么我们可以多加 m 个“虚”的球,预先塞进每个盒子。
这样问题就化归成了有 n+m 个相同的球和 m 个不同的盒子,不允许有空盒的情况,直接运用上面的结论就可以解决问题了。
3.球不同 盒相同 无空箱
即第二类斯特林数
①
d
p
[
n
]
[
m
]
=
m
∗
d
p
[
n
−
1
]
[
m
]
+
d
p
[
n
−
1
]
[
m
−
1
]
(
1
<
=
m
<
n
)
d
p
[
k
]
[
k
]
=
1
(
k
>
=
0
)
d
p
[
k
]
[
0
]
=
0
(
k
>
=
1
)
②
a
n
s
=
0
(
n
<
m
)
①dp[n][m]=m*dp[n-1][m]+dp[n-1][m-1] \ (1<=m<n)\\ dp[k][k]=1 \ (k>=0)\\ dp[k][0]=0 \ (k>=1)\\ ②ans=0 \ (n<m)
①dp[n][m]=m∗dp[n−1][m]+dp[n−1][m−1] (1<=m<n)dp[k][k]=1 (k>=0)dp[k][0]=0 (k>=1)②ans=0 (n<m)
对于第 n 个球,如果之前的 n-1 个球已经放在了 m 个盒子里,那么第 n 个球就可以随便放在这 m 个盒子中,因为我没有新开一个盒子,那么答案就是m×dp[n-1,m]。
另外,如果我是新开了一个盒子,那么只有一种可能,答案是 dp[n-1][m-1]。
4.球不同 盒相同 允许空箱
a
n
s
=
∑
d
p
[
n
]
[
i
]
,
0
<
=
i
<
=
m
,
d
p
[
n
]
[
m
]
ans= \sum dp[n][i],0<=i<=m,dp[n][m]
ans=∑dp[n][i],0<=i<=m,dp[n][m]
状态转移方程同第三种情况。
其实允许空盒就是可以不用把 m 个盒子全部用完,那么就直接在上一种情况的基础上枚举实际用到的盒子的个数,将答案累加起来就可以了。
5.球不同 盒不同 无空箱
a
n
s
=
m
!
×
d
p
(
n
,
m
)
ans=m!×dp(n,m)
ans=m!×dp(n,m)
较第三种情况就多了盒的有序性,dp(n,m)是相同的情况,m!是考虑顺序。
6.球不同 盒不同 允许空箱
a
n
s
=
m
n
ans=m^n
ans=mn
每个球都有m种选择,所以就等于m^n。
7.球相同 盒相同 无空箱
d
p
[
n
]
[
m
]
=
d
p
[
n
−
m
]
[
m
]
(
n
>
=
m
)
d
p
[
n
]
[
m
]
=
0
(
n
<
m
)
dp[n][m]=dp[n-m][m] (n>=m)\\ dp[n][m]=0 (n<m)
dp[n][m]=dp[n−m][m](n>=m)dp[n][m]=0(n<m)
d
p
[
n
]
[
m
]
dp[n][m]
dp[n][m]表示已放进
n
n
n 个球,有
m
m
m 个盒子。
8.球相同 盒相同 允许空箱
d p [ n ] [ m ] = d p [ n ] [ m − 1 ] + d p [ n − m ] [ m ] ( n > = m ) d p [ n ] [ m ] = d p [ n ] [ m − 1 ] ( n < m ) 边 界 : d p [ k ] [ 1 ] = 1 dp[n][m]=dp[n][m-1]+dp[n-m][m]\ (n>=m)\\ dp[n][m]=dp[n][m-1] \ (n<m)\\ 边界:dp[k][1]=1 dp[n][m]=dp[n][m−1]+dp[n−m][m] (n>=m)dp[n][m]=dp[n][m−1] (n<m)边界:dp[k][1]=1
d
p
[
n
]
[
m
]
dp[n][m]
dp[n][m]表示已放进
n
n
n 个球,有
m
m
m 个盒子。
考虑小球比盒子多时,可以选择将盘子不放满或者放满分别对应
d
p
[
n
]
[
m
−
1
]
和
d
p
[
n
−
m
]
[
m
]
dp[n][m-1] 和 dp[n-m][m]
dp[n][m−1]和dp[n−m][m]。
但小球比盒子少时,已经不存在放满的情况了,直接$ dp[n][m-1]$ 。