B Boxes
题意为: n n n 个盒子,有 1 2 \frac{1}{2} 21 的概率盒子里为黑球, 1 2 \frac{1}{2} 21 的概率为白球。现在一个人要开盒子,开盒子就可以得知盒子里面球的颜色,当其知道所有盒子里的球的颜色就会停止,每打开一个盒子需要付出代价 w i w_i wi 。而且他可以花费 c c c ,得知现在没开的盒子里面有多少个是黑球。这个人会使得花费期望尽可能小,问其得知所有盒子里球的颜色的期望。
他若不询问,则成本期望为 ∑ i = 1 n w [ i ] \sum\limits_{i=1}^nw[i] i=1∑nw[i] 。他若要询问肯定是一开始就问,因为我只要第一次问了,后面我就可以一直得知剩下的黑球数量,不必再询问。那么现在设开第 i ( 0 ≤ i ≤ n − 1 ) i(0≤i≤n-1) i(0≤i≤n−1) 个盒子结束游戏,此时的期望成本为 f i f_i fi ,那么现在讨论其概率。对于 i = 0 i=0 i=0 的情况,也就是 n n n 个球的颜色都相同,概率就是 2 × 1 2 n 2×\frac{1}{2}^{n} 2×21n 。对于 i ≠ 0 i≠0 i=0 的情况,我们不仅需要后面的球颜色相同,还需要第 i i i 个球与后面球的颜色不同。为什么多个要求呢,举个例子。假设现在 4 4 4 个盒子,我们现在在计算 f 1 f_1 f1 ,如果不考虑第一个球与后面三个球颜色不同,其实我们就把 f 0 f_0 f0 的情况重复算进去了,也就是把 0000 0000 0000 和 1111 1111 1111 这两个情况又算了一遍,然而我们只要算 0111 0111 0111 和 1000 1000 1000 。
所以 f i ( i > 0 ) f_i(i>0) fi(i>0) 所带的概率应该是 2 × 1 2 n − i + 1 = 1 2 n − i 2×\frac{1}{2}^{n-i+1}=\frac{1}{2}^{n-i} 2×21n−i+1=21n−i 。那么现在设将 w [ ] w[] w[] 排序后其前缀和为 s u m [ ] sum[] sum[] ,所以 f i = s u m [ i ] × 1 2 n − i f_i=sum[i]×\frac{1}{2}^{n-i} fi=sum[i]×21n−i 。
a n s = m i n ( s u m [ n ] , ∑ i = 1 n − 1 f i ) ans=min(sum[n],\sum\limits_{i=1}^{n-1}f_i) ans=min(sum[n],i=1∑n−1fi) 从 1 1 1 开始是因为第 0 0 0 项的前缀和为 0 0 0 并不影响答案。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n;
double c, w[N], sum[N], er[N];
int main() {
// #ifndef ONLINE_JUDGE
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
// #endif
scanf("%d%lf", &n, &c);
er[0] = 1;
for (int i = 1; i <= n; ++i) {
er[i] = 1.0 / 2 * er[i - 1];
}
for (int i = 1; i <= n; ++i) {
scanf("%lf", &w[i]);
}
sort(w + 1, w + 1 + n);
for (int i = 1; i <= n; ++i) {
sum[i] = sum[i - 1] + w[i];
}
for (int i = 1; i <= n - 1; ++i) {
c += sum[i] * er[n - i];
}
printf("%.10f", min(sum[n], c));
}
其实我对这题的描述有点疑惑。。。(对题意没有疑惑请不要看这一段/(ㄒoㄒ)/~~)按题意硬翻译应该是 找 出 所 有 颜 色 的 球 的 最 小 成 本 的 数 学 期 望 找出所有颜色的球的最小成本的数学期望 找出所有颜色的球的最小成本的数学期望 ,照这么说的话,假设其会询问,且黑球和白球中数量较少的球有 x x x 个,那么他不断走狗屎运,把这 x x x 个球一开始全开出来才是最小成本,然后再计算发生这种情况的概率,然而真实的题意并不是这样。。为什么说不一样呢,比如假设当前 3 3 3 个盒子,盒子里面的状态是 001 001 001 ,那么在会询问的情况下,按照这里理解的题意应该只有一开始开那个黑球盒子才能被算到答案里面,但是如果按照真实的题意,第一次开黑,或者第一次开白第二次随意开一个,这两种情况都会被算进答案里面,所以显然两种理解所带来的答案是不一样的。。。我现在仍然十分疑惑。。。