牛客5-B.Boxes

68 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

传送门

题意:

一共n个盒子,每个盒子里放着黑球或者白球,现在问你得知每个盒子中球的颜色所需要的最小花费的期望。

思路:

有两条确认颜色的路线可选: 1、暴力开启所有盒子,这样花费的代价是Σi=1n\Sigma{_{i=1}^n}w[i]. 2、花费c代价,然后从代价最小的盒子开始开,对于每一次开盒,该次开盒后能确认所有盒子颜色的概率为(1-1/2ni^{n-i})。

#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;
}