2021牛客暑期多校訓練營5 B. Boxes(概率)
阿新 • • 發佈:2021-08-16
-
題目: Boxes
-
題意:給出n個盒子,每個盒子中出現黑球/白球的概率均為\(\frac{1}{2}\) ,開第\(i\)個盒子需要花費\(w_i\),並且可以使用提示(可以知道剩下的盒子中還有多少個黑球),使用一次提示的花費為\(C\),問知道每個盒子中球的顏色需要花費的最小期望。
-
解析:能知道每個盒子中所有球的驗證有兩種驗證方式:
- 不使用一次提示機會,開啟所有的盒子,花費 = \(\sum_{i=1}^{n}w_i\)
- 其實使用一次和兩次甚至n次提示都是一樣的,因為你使用一次提示後就可以知道剩下黑球和白球的數量,那每開一個盒子只是白球/黑球數量 - 1罷了,那麼我們希望花費期望最小,肯定是從花費小的盒子開起,並且當開到第\(i\)
-
程式碼:
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; typedef long long ll; const int N = 1e5 + 5; int n; double c; double w[N], sum[N]; int main() { cin >> n >> c; for(int i = 1; i <= n; i++) cin >> w[i]; sort(w + 1, w + 1 + n); //等概率開花費小的箱子優先 double res = c; for(int i = 1; i <= n - 1; i++) { sum[i] = sum[i - 1] + w[i]; res += sum[i] * pow(0.5, (double)n - i); } sum[n] = sum[n - 1] + w[n]; //不使用提示的花費 res = min(res, sum[n]); cout << sum[n] << endl; printf("%.6lf\n", res); return 0; }