题目:
要求:
一共有n个小盒子,里面装有一个有颜色的小球,小球颜色仅有黑白两只颜色。给出打开每个小盒子所需要的花费。
【求出所有颜色球的最小成本的数学期望是多少?】
当时我就是没看见这句话,就是看不懂题目让干嘛,诶 ,就是玩儿
另外,可以花费c的代价知道还没打开的盒子中黑球的数量
分析:
可以看出有两种情况:
1.不用c,花费全部
2.用c,则每一步都可能会停止。
先将花费排序,这样可以保证将花费调至最小~
假设到第n步停止,
则可以知道剩下的所以(n-i)个必须是全黑或者全白(已知)概率为(1/2)^(n-i)
那么此时的概率为1-(1/2)^(n-i)
则可得到公式为w*( 1-(1/2)^(n-i) )
算前n-1个概率,然后再加上c就好惹
最后的答案是min(1,2)求最小。
代码:
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
double x[100010];
int main(){
int n;
double c;
double ans=0;
scanf("%d%lf",&n,&c);
for(int i=1;i<=n;i++){
scanf("%lf",&x[i]);
ans+=x[i];
}
{
double sum=0;
sort(x+1,x+n+1);
if(n<=23){
for(int i=1;i<n;i++){
sum+=x[i]*(1-1.0/(1<<(n-i)));
}
}
else {
for(int i=1;i<n-22;i++){
sum+=x[i];
}int cnt=22;
for(int i=n-22;i<n;i++){
sum+=x[i]*(1-1.0/(1<<(cnt)));
cnt--;
}
}printf("%.6lf\n",min(ans,sum+c));
}
}