码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4336 Card Collector 容斥 数学期望 概率

时间:2020-06-25 21:39:16      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:有一个   for   color   return   第一个   概率   turn   card   code   

题意:给出N个物品及每次获得第i个物品的概率 问获得所有物品的次数的期望、

从简单考虑 若只有一个物品  获得一个物品的期望是1/p (1/p * p = 1) 

这样可以推理得到 E1 = 1 / p1 , E2 = 1/ p2 , E12 = 1 / (p1+p2)  (即获得第一个物品或第二个物品的期望) 这样如果要计算获得第一个物品和第二个物品的期望 就要从E1和E2中减去重复的期望

 E(12) = E1 + E2 - E12  ,故可容斥

int n;
double p[25];

double solve() {
    double res = 0;
    for (int i = 1; i < (1 << n); i++) {
        int byte = 0;
        double sum = 0;
        for (int j = 0; j < n; j++) {
            if (i & (1 << j)) {
                byte++;
                sum +=  p[j];
            }
        }
        //cout << sum << endl;
        if (byte % 2) res +=1 / sum;
        else res -= 1 / sum;
    }
    return res;
}



int main() {
    while (~scanf("%d", &n)) {
        for (int i = 0; i < n; i++) scanf("%lf", &p[i]);
        printf("%.5f\n", solve());
    }

}

 

HDU 4336 Card Collector 容斥 数学期望 概率

标签:有一个   for   color   return   第一个   概率   turn   card   code   

原文地址:https://www.cnblogs.com/hznumqf/p/13192890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!