题目:
有
n
n
n种球,第
i
i
i种球有
a
i
a_i
ai个。有
k
k
k个盒子,每种球必须恰好放入
b
i
b_i
bi个盒子里且每个盒子只能放同一种颜色的球。
∑
i
=
1
n
b
i
=
k
\sum_{i=1}^{n}b_i=k
∑i=1nbi=k问有多少种方法。
思路:
a
n
s
=
k
!
∏
i
=
1
n
b
i
!
∏
i
=
1
n
(
a
i
−
1
b
i
−
1
)
ans=\frac{k!}{\prod_{i=1}^{n}b_i!}\prod_{i=1}^{n}{a_i-1\choose b_i-1}
ans=∏i=1nbi!k!i=1∏n(bi−1ai−1)
首先不考虑同种颜色盒子之间的相对顺序,那么排列为
k
!
∏
i
=
1
n
b
i
!
\frac{k!}{\prod_{i=1}^{n}b_i!}
∏i=1nbi!k!。
然后考虑相对顺序,那么就是有
a
i
a_i
ai个物品,分成
b
i
b_i
bi份有多少种方案,那么就是
(
a
i
−
1
b
i
−
1
)
{a_i-1\choose b_i-1}
(bi−1ai−1)。
题目:
有
n
n
n种球,第
i
i
i种球有
a
i
a_i
ai个。有
k
k
k个盒子,每个盒子只能放同一种颜色的球。问有多少种方法。
思路:
假设第
i
i
i种放入
b
i
b_i
bi个盒子,则有
∑
i
=
1
n
b
i
=
k
\sum_{i=1}^{n}b_i=k
∑i=1nbi=k,
a
n
s
=
k
!
∏
i
=
1
n
(
a
i
−
1
b
i
−
1
)
∏
i
=
1
n
b
i
!
ans=k!\frac{\prod_{i=1}^{n}{a_i-1\choose b_i-1}}{\prod_{i=1}^{n}b_i!}
ans=k!∏i=1nbi!∏i=1n(bi−1ai−1)。
d
p
dp
dp即可,类似背包维护一个权值。
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]表示,前
i
i
i种放入
j
j
j个盒子里的方案数除以
j
!
j!
j!,说白了就是维护
a
n
s
ans
ans的右边那个分式。
d
p
[
i
]
[
j
]
=
∑
l
=
0
j
d
p
[
i
−
1
]
[
j
−
l
]
(
a
i
−
1
l
−
1
)
l
!
dp[i][j]=\sum_{l=0}^{j}dp[i-1][j-l]\frac{{a_i-1\choose l-1}}{l!}
dp[i][j]=l=0∑jdp[i−1][j−l]l!(l−1ai−1)
答案就是
k
!
d
p
[
n
]
[
k
]
k!dp[n][k]
k!dp[n][k]。
上面这个
d
p
dp
dp也可以用分治
F
F
T
FFT
FFT做。