多重集定义
多重集是指包含重复元素的广义集合
例如
S
=
{
n
1
⋅
a
1
,
n
2
⋅
a
2
,
.
.
.
,
n
k
⋅
a
k
}
S=\{n_1\cdot a_1,n_2\cdot a_2,...,n_k\cdot a_k\}
S={n1⋅a1,n2⋅a2,...,nk⋅ak}就是由
n
1
n_1
n1个
a
1
a_1
a1,
n
2
n_2
n2个
a
2
a_2
a2,…,
n
k
n_k
nk个
a
k
a_k
ak组成的多重集
多重集的排列数
给定一个多重集
S
=
{
n
1
⋅
a
1
,
n
2
⋅
a
2
,
.
.
.
,
n
k
⋅
a
k
}
S=\{n_1\cdot a_1,n_2\cdot a_2,...,n_k\cdot a_k\}
S={n1⋅a1,n2⋅a2,...,nk⋅ak}
其排列数为
A
=
N
!
n
1
!
n
2
!
.
.
.
n
k
!
,
(
N
=
∑
i
=
1
k
n
i
)
A=\frac{N!}{n_1!n_2!...n_k!},(N=\sum_{i=1}^kn_i)
A=n1!n2!...nk!N!,(N=i=1∑kni)
多重集的组合数
(Q1)
给定一个多重集
S
=
{
n
1
⋅
a
1
,
n
2
⋅
a
2
,
.
.
.
,
n
k
⋅
a
k
}
S=\{n_1\cdot a_1,n_2\cdot a_2,...,n_k\cdot a_k\}
S={n1⋅a1,n2⋅a2,...,nk⋅ak}
以及一个整数
m
m
m,且有
m
<
=
n
i
(
∀
i
∈
[
1
,
k
]
)
m<=n_i(\forall i\in[1,k])
m<=ni(∀i∈[1,k])
求从S中取出任意m个元素可以产生的不同多重集数量
(A1)
a
n
s
=
C
k
+
m
−
1
k
−
1
ans=C_{k+m-1}^{k-1}
ans=Ck+m−1k−1
证明
题目所求就是满足
∑
i
=
1
k
x
i
=
m
\sum_{i=1}^kx_i=m
∑i=1kxi=m的多重集
{
x
1
⋅
a
1
,
x
2
⋅
a
2
,
.
.
.
,
x
k
⋅
a
k
}
\{x_1\cdot a_1,x_2\cdot a_2,...,x_k\cdot a_k\}
{x1⋅a1,x2⋅a2,...,xk⋅ak}的数量
换句话说
就是就是要给每个
x
i
x_i
xi赋值
[
0
,
m
]
[0,m]
[0,m]中的任意整数,且所有
x
i
x_i
xi的和为m
(这里因为有
m
<
=
n
i
(
∀
i
∈
[
1
,
k
]
)
m<=n_i(\forall i\in[1,k])
m<=ni(∀i∈[1,k]),所以不用考虑
x
i
>
n
i
x_i>n_i
xi>ni的情况)
若我们用0的个数表示每个
x
i
x_i
xi的值
那么我们可以转化原问题为
用
k
−
1
k-1
k−1个
1
1
1将
m
m
m个
0
0
0分为
k
k
k组的方案数
也就是多重集
{
m
⋅
0
,
(
k
−
1
)
⋅
1
}
\{m\cdot 0,(k-1)\cdot 1\}
{m⋅0,(k−1)⋅1}的排列数
故得
a
n
s
=
(
m
+
k
−
1
)
!
m
!
(
k
−
1
)
!
=
C
k
+
m
−
1
m
=
C
k
+
m
−
1
k
−
1
ans=\frac{(m+k-1)!}{m!(k-1)!}=C_{k+m-1}^{m}=C_{k+m-1}^{k-1}
ans=m!(k−1)!(m+k−1)!=Ck+m−1m=Ck+m−1k−1
(Q2)
给定一个多重集
S
=
{
n
1
⋅
a
1
,
n
2
⋅
a
2
,
.
.
.
,
n
k
⋅
a
k
}
S=\{n_1\cdot a_1,n_2\cdot a_2,...,n_k\cdot a_k\}
S={n1⋅a1,n2⋅a2,...,nk⋅ak}
以及一个整数
m
(
m
<
=
∑
i
=
1
k
n
i
m(m<=\sum_{i=1}^kn_i
m(m<=∑i=1kni)
求从S中取出任意m个元素可以产生的不同多重集数量
(A2)
a
n
s
=
C
k
+
m
−
1
k
−
1
−
∑
i
=
1
k
C
k
+
m
−
n
i
−
2
k
−
1
+
∑
1
<
=
i
,
j
<
=
k
,
i
!
=
j
C
k
+
m
−
n
i
−
n
j
−
3
k
−
1
−
.
.
.
+
(
−
1
)
k
C
k
+
m
−
∑
i
=
1
k
n
i
−
(
k
+
1
)
k
−
1
ans=C_{k+m-1}^{k-1}-\sum_{i=1}^kC_{k+m-n_i-2}^{k-1}+\sum_{1<=i,j<=k,i!=j}C_{k+m-n_i-n_j-3}^{k-1}-...+(-1)^kC_{k+m-\sum_{i=1}^{k}n_i-(k+1)}^{k-1}
ans=Ck+m−1k−1−i=1∑kCk+m−ni−2k−1+1<=i,j<=k,i!=j∑Ck+m−ni−nj−3k−1−...+(−1)kCk+m−∑i=1kni−(k+1)k−1
证明
上面的式子显然用到了容斥定理
怎么理解呢
先不考虑
n
i
n_i
ni得限制
那么从其中取m个元素的方案数为
C
k
+
m
−
1
k
−
1
C_{k+m-1}^{k-1}
Ck+m−1k−1
这里的方案数显然包含了
x
i
>
n
i
x_i>n_i
xi>ni的不合法方案
设
S
i
S_i
Si表示至少包含
n
i
+
1
n_i+1
ni+1个
a
i
a_i
ai的多重集(也就是
a
i
a_i
ai个数不合法的多重集)
我们需要从上述总方案数中减去
S
i
S_i
Si的数量
怎么求
S
i
S_i
Si的数量呢
我们先从
S
S
S中取出
n
i
+
1
n_i+1
ni+1个
a
i
a_i
ai
再在
S
S
S任选
m
−
n
i
−
1
m-n_i-1
m−ni−1个元素
即构成了
S
i
S_i
Si
根据Q1证明可得其数量为
C
k
+
m
−
n
i
−
2
k
−
1
C_{k+m-n_i-2}^{k-1}
Ck+m−ni−2k−1
减去了所有只考虑
x
i
>
n
i
x_i>n_i
xi>ni的不合法方案后
会发现我们还多减去了
S
i
⋂
S
j
S_i\bigcap S_j
Si⋂Sj的数量
(也就是同时包含了至少
n
i
+
1
n_i+1
ni+1个
a
i
a_i
ai和至少
n
j
+
1
n_j+1
nj+1个
a
j
a_j
aj的多重集)
我们再把这部分数量加回来
∑
1
<
=
i
,
j
<
=
k
,
i
!
=
j
C
k
+
m
−
n
i
−
n
j
−
3
k
−
1
\sum_{1<=i,j<=k,i!=j}C_{k+m-n_i-n_j-3}^{k-1}
∑1<=i,j<=k,i!=jCk+m−ni−nj−3k−1
反复容斥下去即可得到上述式子
a
n
s
=
C
k
+
m
−
1
k
−
1
−
∑
i
=
1
k
C
k
+
m
−
n
i
−
2
k
−
1
+
∑
1
<
=
i
,
j
<
=
k
,
i
!
=
j
C
k
+
m
−
n
i
−
n
j
−
3
k
−
1
−
.
.
.
+
(
−
1
)
k
C
k
+
m
−
∑
i
=
1
k
n
i
−
(
k
+
1
)
k
−
1
ans=C_{k+m-1}^{k-1}-\sum_{i=1}^kC_{k+m-n_i-2}^{k-1}+\sum_{1<=i,j<=k,i!=j}C_{k+m-n_i-n_j-3}^{k-1}-...+(-1)^kC_{k+m-\sum_{i=1}^{k}n_i-(k+1)}^{k-1}
ans=Ck+m−1k−1−i=1∑kCk+m−ni−2k−1+1<=i,j<=k,i!=j∑Ck+m−ni−nj−3k−1−...+(−1)kCk+m−∑i=1kni−(k+1)k−1