2021牛客暑期多校训练营5 B-Boxes
Boxes题意:n个箱子,每个箱子要么是黑要么是白,黑白的概率相同 可以花wi元打开第i个箱子 可以花c元作弊知道未打开箱子中有多少黑球 求知道所有箱子颜色的最小花费的期望 策略:如果要作弊最好是一开始就作弊,对箱子按开箱花费进行排序 按顺序开箱直到打开所有的黑箱或者白箱 当有k个黑箱 且最后一个黑箱不是第n个时 开到最后一个黑箱为止 若最后一个黑箱是第n个 则开到开完所有白箱为止 得到期望公式为
交换求和顺序得到
化简得到
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
double s[maxn],pp[maxn];
int main() {
memset(s,0,sizeof(s));
int n;
double c,las;
cin>>n>>c;
for(int i=1;i<=n;i++)
{
cin>>s[i];
}
sort(s+1,s+1+n);
for(int i=1;i<n;i++)s[i]+=s[i-1];
las=s[n]+s[n-1];
s[n]=s[n-1];
pp[0]=1;
for(int i=1;i<=n;i++)pp[i]=pp[i-1]/2.0;
double ans=0;
for(int i=1;i<=n-1;i++){
ans+=pp[n-i]*s[i];
}
ans+=c;
if(ans>las)ans=las;
printf("%.8lf\n",ans);
return 0;
}