本文已参与「新人创作礼」活动,一起开启掘金创作之路。
题意:
一共n个盒子,每个盒子里放着黑球或者白球,现在问你得知每个盒子中球的颜色所需要的最小花费的期望。
思路:
有两条确认颜色的路线可选: 1、暴力开启所有盒子,这样花费的代价是w[i]. 2、花费c代价,然后从代价最小的盒子开始开,对于每一次开盒,该次开盒后能确认所有盒子颜色的概率为(1-1/2)。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
double w[100010];
void solve()
{
int n;
cin>>n;
double c;
cin>>c;
double ans = 0;
for(int i = 1; i <= n; i++)
{
cin>>w[i];
ans += w[i];
}
double res = 0;
sort(w+1,w+1+n);
for(int i = 1; i <= n; i++)
{
res += w[i]*(1.0-1.0/pow(2.0,n-i));
}
printf("%0.6lf\n",min(res+c,ans));
}
int main()
{
solve();
return 0;
}