HDU4336 Card Collector【容斥原理】
来源:互联网 发布:如何查询淘宝会员等级 编辑:程序博客网 时间:2024/05/16 16:19
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4336
题目大意:
每包零食里有一张卡牌,总共有N种不同的卡牌,得到这N种卡牌的概率分别为P[i](1 <= i <= N)。
求收集到所有卡牌的期望是多少。
思路:
Pi表示得到第i张卡牌的概率,Ei表示得到第i张卡的期望。
假设现在有两张卡牌,由题意可知:
E1 = 1/P1,E2 = 1/P2,E12(表示肯定买到1或2其中一包的期望) = 1/(P1+P2)。
当我们计算E1和E2的时候,E12是重复计算了2次,应该减去一次。根据容斥定理可知:
E = E1 + E2 - E12。
同理,三张牌的时候:
E = E1 + E2 + E3 - E12 - E13 - E23 + E123。
以此类推,当计算期望中的各项的时候,如果该项为奇数项(奇数张卡的期望),则加上该项。
如果该项为偶数项2(偶数项卡的期望),则减去该项。
AC代码:
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;double P[50];int N;double Solve(){ double xh = 0; for(int i = 1; i < (1 << N); ++i) //遍历2^N种情况 从00…01 到 11…11 { double sum = 0; int odd = 0; for(int j = 0; j < N; ++j) //对于i(每种情况),计算i的二进制为1的位数 { if((1<<j) & i) //i从右往左数对应第j位上是否为1 { odd++; //二进制为1的位数 sum += P[j+1]; //将为1项的概率加起来。 } } if(odd & 1) //奇数项加,偶数项减 xh += 1/sum; else xh -= 1/sum; } return xh;}int main(){ while(~scanf("%d",&N)) { for(int i = 1; i <= N; ++i) scanf("%lf",&P[i]); printf("%.6lf\n",Solve()); //注意lf 和 f } return 0;}
0 0
- hdu4336 Card Collector (容斥原理)
- HDU4336 Card Collector【容斥原理】
- hdu4336 Card Collector 概率dp(或容斥原理?)
- HDU4336 Card Collector 【容斥原理】【数学期望】
- hdu 4336 Card Collector (容斥原理)
- HDU4336 Card Collector
- HDU4336 Card Collector
- hdu4336-----Card Collector
- hdu4336 Card Collector
- 【HDU4336】【Card Collector】【概率dp】
- 概率dp HDU4336 Card Collector
- HDU 4336 Card Collector 数学期望(容斥原理)
- hdu 4336 Card Collector (期望dp|容斥原理)
- Hdu 4336 Card Collector (容斥原理 循环)
- hdu 4336 Card Collector(概率dp, 容斥原理)
- HDU 4336 Card Collector (容斥原理||概率DP)
- hdu4336 Card Collector 状态压缩dp
- hdu4336 Card Collector 状压+概率DP
- 求数列的和
- android动画开发
- hdu 1010 Tempter of the Bone(dfs)
- Codeforces 569A Music
- 1027. Colors in Mars (20)
- HDU4336 Card Collector【容斥原理】
- UVA 699 The Falling Leaves (二叉树水题)
- swift - 函数指针的应用 - 避免重复算法
- 新装Win10没声音的处理方案
- LeetCode-15 3sum
- Layout Inflation
- #BestCoder Round #50 (div.2)
- map函数的用处以及几个基本的函数
- 从 Qt 的 delete 说开来