题意:
有一个序列 a 1 , ⋯ , a n a_1,\cdots,a_n a1,⋯,an,初始时它们全为 1 1 1。进行 d d d 轮操作:每轮操作以正比于 a a a 的概率选择一个 a i a_i ai 加 1 1 1。求最后 a 1 , ⋯ , a n a_1,\cdots,a_n a1,⋯,an 中前 r r r 大的和的期望,精度要求 1 0 − 6 10^{-6} 10−6。
n , d , r ≤ 500 n,d,r\leq 500 n,d,r≤500。
题解:
即为求:
1
n
(
n
+
1
)
⋯
(
n
+
d
−
1
)
∑
a
1
+
⋯
+
a
n
=
d
(
d
a
1
,
⋯
,
a
n
)
∏
i
=
1
n
(
a
i
!
)
∑
k
=
1
r
k
t
h
m
a
x
i
=
1
n
(
a
i
)
=
d
!
n
(
n
+
1
)
⋯
(
n
+
d
−
1
)
∑
a
1
+
⋯
+
a
n
=
d
∑
k
=
1
r
k
t
h
m
a
x
i
=
1
n
(
a
i
)
=
1
(
n
+
d
−
1
d
)
∑
a
1
+
⋯
+
a
n
=
d
∑
k
=
1
r
k
t
h
m
a
x
i
=
1
n
(
a
i
)
\begin{aligned} &\frac{1}{n(n+1)\cdots(n+d-1)}\sum_{a_1+\cdots+a_n=d}\binom{d}{a_1,\cdots,a_n}\prod_{i=1}^n (a_i!)\sum_{k=1}^{r} kthmax_{i=1}^{n}(a_i)\\ =&\frac{d!}{n(n+1)\cdots(n+d-1)}\sum_{a_1+\cdots+a_n=d}\sum_{k=1}^{r} kthmax_{i=1}^{n}(a_i)\\ =&\frac{1}{\binom{n+d-1}{d}}\sum_{a_1+\cdots+a_n=d}\sum_{k=1}^{r} kthmax_{i=1}^{n}(a_i)\\ \end{aligned}
==n(n+1)⋯(n+d−1)1a1+⋯+an=d∑(a1,⋯,and)i=1∏n(ai!)k=1∑rkthmaxi=1n(ai)n(n+1)⋯(n+d−1)d!a1+⋯+an=d∑k=1∑rkthmaxi=1n(ai)(dn+d−1)1a1+⋯+an=d∑k=1∑rkthmaxi=1n(ai)
设
h
n
,
d
h_{n,d}
hn,d 表示所有
a
1
+
⋯
+
a
n
=
d
a_1+\cdots+a_n=d
a1+⋯+an=d 的方案中前
r
r
r 大的
a
i
a_i
ai 的和的和。那么:
h
n
,
d
=
∑
i
=
1
n
(
n
i
)
(
min
(
r
,
i
)
(
(
d
−
i
)
+
i
−
1
i
−
1
)
+
h
i
,
d
−
i
)
h_{n,d}=\sum_{i=1}^{n}\binom{n}{i}\left(\min(r,i)\binom{(d-i)+i-1}{i-1}+h_{i,d-i}\right)
hn,d=i=1∑n(in)(min(r,i)(i−1(d−i)+i−1)+hi,d−i)
其中
i
i
i 枚举的是有多少
a
j
a_j
aj 至少为
1
1
1。DP 的过程可以理解为从最底层开始一层一层地在上一层的基础上往上填。
对于取模而不必考虑精度的情况,可以做到更快。
对于 a 1 , ⋯ , a n a_1,\cdots,a_n a1,⋯,an 中前 r r r 大的和,可以转为 ∑ i ≥ 1 min ( r , ( a 1 , ⋯ , a n 中 ≥ i 的数的个数 ) ) \sum_{i\geq 1}\min(r,(a_1,\cdots,a_n中\geq i的数的个数)) ∑i≥1min(r,(a1,⋯,an中≥i的数的个数))。
设
f
i
,
k
f_{i,k}
fi,k 表示
a
1
,
⋯
,
a
n
a_1,\cdots,a_n
a1,⋯,an 中恰好有
k
k
k 个数
≥
i
\geq i
≥i 的方案数,那么:
f
i
,
k
=
(
n
k
)
[
x
d
]
(
x
i
1
−
x
)
k
(
1
−
x
i
1
−
x
)
n
−
k
\begin{aligned} f_{i,k}&=\binom{n}{k}[x^d]\left(\frac{x^i}{1-x}\right)^k\left(\frac{1-x^i}{1-x}\right)^{n-k}\\ \end{aligned}
fi,k=(kn)[xd](1−xxi)k(1−x1−xi)n−k
我们要求的是:
∑
i
≥
1
∑
k
min
(
r
,
k
)
f
i
,
k
=
∑
i
≥
1
∑
k
min
(
r
,
k
)
(
n
k
)
[
x
d
]
x
i
k
(
1
−
x
i
)
n
−
k
(
1
−
x
)
n
=
∑
i
≥
1
∑
k
min
(
r
,
k
)
(
n
k
)
∑
j
≥
0
[
x
j
]
(
x
k
(
1
−
x
)
n
−
k
)
[
x
d
−
i
j
]
1
(
1
−
x
)
n
=
∑
j
≥
0
(
∑
k
min
(
r
,
k
)
(
n
k
)
[
x
j
]
x
k
(
1
−
x
)
n
−
k
)
(
∑
i
≥
1
[
x
d
−
i
j
]
1
(
1
−
x
)
n
)
=
∑
j
≥
0
A
j
B
j
\begin{aligned} &\sum_{i\geq 1}\sum_{k}\min(r,k)f_{i,k}\\ =&\sum_{i\geq 1}\sum_{k}\min(r,k)\binom{n}{k}[x^{d}]\frac{x^{ik}(1-x^i)^{n-k}}{(1-x)^n}\\ =&\sum_{i\geq 1}\sum_{k}\min(r,k)\binom{n}{k}\sum_{j\geq 0}[x^j]\bigg(x^k(1-x)^{n-k}\bigg)[x^{d-ij}]\frac{1}{(1-x)^n}\\ =&\sum_{j\geq 0}\left(\sum_{k}\min(r,k)\binom{n}{k}[x^j]x^k(1-x)^{n-k}\right)\left(\sum_{i\geq 1}[x^{d-ij}]\frac{1}{(1-x)^n}\right)\\ =&\sum_{j\geq 0}A_jB_j\\ \end{aligned}
====i≥1∑k∑min(r,k)fi,ki≥1∑k∑min(r,k)(kn)[xd](1−x)nxik(1−xi)n−ki≥1∑k∑min(r,k)(kn)j≥0∑[xj](xk(1−x)n−k)[xd−ij](1−x)n1j≥0∑(k∑min(r,k)(kn)[xj]xk(1−x)n−k)(i≥1∑[xd−ij](1−x)n1)j≥0∑AjBj
第二步很有技巧性,实现了
i
,
k
i,k
i,k 的分离。
对于
A
j
A_j
Aj:
A
j
=
∑
k
min
(
r
,
k
)
(
n
k
)
[
x
j
]
x
k
(
1
−
x
)
n
−
k
=
∑
k
min
(
r
,
k
)
(
n
k
)
(
−
1
)
j
−
k
(
n
−
k
j
−
k
)
\begin{aligned} A_j=&\sum_{k}\min(r,k)\binom nk[x^j]x^k(1-x)^{n-k}\\ =&\sum_{k}\min(r,k)\binom nk(-1)^{j-k}\binom{n-k}{j-k}\\ \end{aligned}
Aj==k∑min(r,k)(kn)[xj]xk(1−x)n−kk∑min(r,k)(kn)(−1)j−k(j−kn−k)
其实到这里就已经可以直接
O
(
n
log
n
)
O(n\log n)
O(nlogn) 卷了,但事实上:
A
j
=
∑
k
min
(
r
,
k
)
(
n
k
)
[
x
j
]
x
k
(
1
−
x
)
n
−
k
=
∑
k
=
0
r
k
(
n
k
)
[
x
j
]
x
k
(
1
−
x
)
n
−
k
+
r
∑
k
>
r
(
n
k
)
[
x
j
]
x
k
(
1
−
x
)
n
−
k
\begin{aligned} A_j=&\sum_{k}\min(r,k)\binom nk[x^j]x^k(1-x)^{n-k}\\ =&\sum_{k=0}^rk\binom nk[x^j]x^k(1-x)^{n-k}+r\sum_{k>r}\binom{n}{k}[x^j]x^k(1-x)^{n-k}\\ \end{aligned}
Aj==k∑min(r,k)(kn)[xj]xk(1−x)n−kk=0∑rk(kn)[xj]xk(1−x)n−k+rk>r∑(kn)[xj]xk(1−x)n−k
对于后者:
∑
k
=
0
r
(
n
k
)
[
x
j
]
x
k
(
1
−
x
)
n
−
k
=
∑
k
=
0
r
[
u
k
x
j
]
(
n
k
)
(
u
x
)
k
(
1
−
x
)
n
−
k
=
∑
k
=
0
r
[
u
k
x
j
]
(
(
u
x
)
+
(
1
−
x
)
)
n
=
[
u
r
x
j
]
(
u
x
+
1
−
x
)
n
1
−
u
=
[
u
r
x
j
]
(
(
u
−
1
)
x
+
1
)
n
1
−
u
=
(
n
j
)
[
u
r
]
(
u
−
1
)
j
1
−
u
=
(
n
j
)
(
−
1
)
j
−
r
(
j
−
1
r
)
\begin{aligned} &\sum_{k=0}^r\binom{n}{k}[x^j]x^k(1-x)^{n-k}\\ =&\sum_{k=0}^r[u^kx^j]\binom{n}{k}{(ux)}^k(1-x)^{n-k}\\ =&\sum_{k=0}^r[u^kx^j]((ux)+(1-x))^n\\ =&[u^rx^j]\frac{(ux+1-x)^n}{1-u}\\ =&[u^rx^j]\frac{((u-1)x+1)^n}{1-u}\\ =&\binom{n}{j}[u^r]\frac{(u-1)^j}{1-u}\\ =&\binom{n}{j}(-1)^{j-r}\binom{j-1}{r} \end{aligned}
======k=0∑r(kn)[xj]xk(1−x)n−kk=0∑r[ukxj](kn)(ux)k(1−x)n−kk=0∑r[ukxj]((ux)+(1−x))n[urxj]1−u(ux+1−x)n[urxj]1−u((u−1)x+1)n(jn)[ur]1−u(u−1)j(jn)(−1)j−r(rj−1)
对于前者也是类似的。
对于 B j = ∑ i j ≤ d c i j B_j=\sum_{ij\leq d}c_{ij} Bj=∑ij≤dcij,其中 c p = [ x d − p ] 1 ( 1 − x ) n c_p=[x^{d-p}]\frac{1}{(1-x)^n} cp=[xd−p](1−x)n1。这相当于一个高维后缀和(一维对应一个质数幂),可以做到 O ( n log log n ) O(n\log \log n) O(nloglogn)。
总时间复杂度 O ( n log log n ) O(n\log \log n) O(nloglogn)。