Boxes

在这里插入图片描述
在这里插入图片描述

原来就是道简单的概率计算题。。。

根据题目意思那我们知道可以分为两种情况

第一种,不要提示,我直接把所有盒子打开,那么就知道都是什么球了,这时候概率就是1,所有费用加起来乘上1就是期望。。。

第二种,我找小G要了提示需要成本c,那么我现在知道黑球有多少了,如果如果黑球=n个盒子,那么就说明不用开盒子了,如果黑球=0那么也不要开盒子了,如果黑球!=n个,那么我们开盒子,因为是最小期望,那么我们优先开当前花费最小的盒子,知道了当前盒子的球的颜色,那么就可以知道后面球的概率,接下来数学期望的就是了。。

AC代码:

#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;

double x[100050];
int main(){
    
    int n;
    double cost;
    cin >> n >> cost;
    
    for(int i = 1;i<=n;i++) cin >> x[i];
    
    sort(x+1,x+n+1);    //因为求最小期望,那么可能优先开权值小的
        
    for(int i = 1;i<=n;i++) x[i] = x[i-1] + x[i];    //计算前缀和
    double ans = cost;
    
    for(int i = 1;i<=n;i++){    //把所有情况概率加起来
        ans += x[i-1] * pow(0.5,n-i+1);
    }
    
    if(ans > x[n]) ans = x[n];    
    
    printf("%.6lf",ans);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值