Description:
n
n
个物品,每次购买一个,有的概率选到第i个物品,问获得所有物品的期望次数。
Solution:
根据
min−max
m
i
n
−
m
a
x
容斥,有
E[max(S)]=∑S′∈S(−1)|S′+1|∗E[min(S′)]
E
[
m
a
x
(
S
)
]
=
∑
S
′
∈
S
(
−
1
)
|
S
′
+
1
|
∗
E
[
m
i
n
(
S
′
)
]
E[max(S)]
E
[
m
a
x
(
S
)
]
表示获得所有元素的期望,
E[min(S′)]
E
[
m
i
n
(
S
′
)
]
表示获得其中一个元素的概率
#include <bits/stdc++.h>
using namespace std;
int n;
double ans;
double f[27];
void dfs(int d, double sum, int ff) {
if(d == n + 1) {
if(sum > 0) {
ans += 1. / sum * ff;
}
return;
}
dfs(d + 1, sum + f[d], -ff);
dfs(d + 1, sum, ff);
}
int main() {
while(~scanf("%d", &n)) {
ans = 0;
for(int i = 1; i <= n; ++i) {
scanf("%lf", &f[i]);
}
dfs(1, 0, 1);
printf("%.6f\n", fabs(ans));
}
return 0;
}