题目大意是:有m个工人在线,有k个工人不在线,要给n个任务分配工人,第 i i i个任务要 t i t_i ti个工人,如果选到不在线的工人就要重新选,每个工人选择的概率相同,要使得分配次数的期望尽量小,输出字典序最小的分配方案。
第
i
i
i个任务分配合法的概率服从超几何分布为:
C
(
m
−
∑
j
=
1
i
−
1
t
j
,
t
i
)
C
(
m
+
k
−
∑
j
=
1
i
−
1
t
j
,
t
i
)
\frac{C(m-\sum_{j=1}^{i-1}t_j,t_i)}{C(m+k-\sum_{j=1}^{i-1}t_j,t_i)}
C(m+k−∑j=1i−1tj,ti)C(m−∑j=1i−1tj,ti)
其实它的期望是服从几何分布的,也就是概率的倒数。
C
(
m
+
k
−
∑
j
=
1
i
−
1
t
j
,
t
i
)
C
(
m
−
∑
j
=
1
i
−
1
t
j
,
t
i
)
\frac{C(m+k-\sum_{j=1}^{i-1}t_j,t_i)}{C(m-\sum_{j=1}^{i-1}t_j,t_i)}
C(m−∑j=1i−1tj,ti)C(m+k−∑j=1i−1tj,ti)
那么总期望就是
∑
i
=
1
n
C
(
m
+
k
−
∑
j
=
1
i
−
1
t
j
,
t
i
)
C
(
m
−
∑
j
=
1
i
−
1
t
j
,
t
i
)
\sum_{i=1}^n\frac{C(m+k-\sum_{j=1}^{i-1}t_j,t_i)}{C(m-\sum_{j=1}^{i-1}t_j,t_i)}
i=1∑nC(m−∑j=1i−1tj,ti)C(m+k−∑j=1i−1tj,ti)
我们先单独看某一项。先把组合数化成阶乘的形式。为了好写一点,我把
∑
j
=
1
i
−
1
t
i
\sum_{j=1}^{i-1}t_i
∑j=1i−1ti记为
s
i
s_i
si
C ( m + k − s i − 1 , t i ) C ( m − s i − 1 , t i ) = ( m + k − s i − 1 ) ! ( m + k − s i − 1 − t i ) ! ∗ t i ! ( m − s i − 1 ) ! ( m − s i − 1 − t i ) ! ∗ t i ! = ( m + k − s i − 1 ) ! ( m + k − s i ) ! ∗ t i ! ∗ ( m − s i ) ! ∗ t i ! ( m − s i − 1 ) ! = ( m + k − s i − 1 ) ∗ . . . ∗ ( m + k − s i + 1 ) ( m − s i − 1 ) ∗ . . . ∗ ( m − s i + 1 ) \frac{C(m+k-s_{i-1},t_i)}{C(m-s_{i-1},t_i)}\newline= \frac{\frac{(m+k-s_{i-1})!}{(m+k-s_{i-1}-t_i)!*t_i!}}{\frac{(m-s_{i-1})!}{(m-s_{i-1}-t_i)!*t_i!}}\newline=\frac{(m+k-s_{i-1})!}{(m+k-s_{i})!*t_i!}*{\frac{(m-s_{i})!*t_i!}{(m-s_{i-1})!}}\newline=\frac{(m+k-s_{i-1})*...*(m+k-s_{i}+1)}{(m-s_{i-1})*...*(m-s_i+1)} C(m−si−1,ti)C(m+k−si−1,ti)=(m−si−1−ti)!∗ti!(m−si−1)!(m+k−si−1−ti)!∗ti!(m+k−si−1)!=(m+k−si)!∗ti!(m+k−si−1)!∗(m−si−1)!(m−si)!∗ti!=(m−si−1)∗...∗(m−si+1)(m+k−si−1)∗...∗(m+k−si+1)
化到这一步就可以看出来了。相当于在
(
m
+
k
)
!
m
!
\frac{(m+k)!}{m!}
m!(m+k)!中每次选连续的一段,我们设第i个任务选取的第一个数是
m
+
k
−
i
m
−
i
\frac{m+k-i}{m-i}
m−im+k−i,也就是说它的期望是
m
+
k
−
i
m
−
i
∗
.
.
.
∗
m
+
k
−
i
−
t
i
+
1
m
−
i
−
t
i
+
1
\frac{m+k-i}{m-i}*...*\frac{m+k-i-t_i+1}{m-i-t_i+1}
m−im+k−i∗...∗m−i−ti+1m+k−i−ti+1。然后我们发现
m
+
k
−
i
m
−
i
=
1
+
k
m
−
i
\frac{m+k-i}{m-i}=1+\frac{k}{m-i}
m−im+k−i=1+m−ik 也就是说它是递增的,所以为了让人数多的任务期望小,我们就得先给它安排任务(口胡证明 证明留作练习 。当k为0的时侯期望是相同的,我们直接输出1~n即可。