Card Collector(期望+min-max容斥)

Card Collector

woc居然在毫不知情的情况下写出一个min-max容斥

题意

买一包方便面有几率附赠一张卡,有\(n\)种卡,每种卡出现的概率是\(p_i\),保证\(\Sigma p_i \le 1\),集齐所有种类卡牌期望买多少包方便面?

解法

看次题解前,你必须要理解当只有一种卡,他出现的概率是\(p\),那么我期望购买$\frac 1 p $包方便面就可以获得这种卡。

否则请你右上角,因为博主不会解释...

唯一的解释就是:

(期望购买包数)\(\times\)(每包里面出现一张的概率)=(张数)

所以把概率除过去就好了...

我们想把所有\(\frac 1 p\)加起来,发现这样的错误的,原因是我们忽略了每次抽卡牌的时候可能抽到别的卡牌,把所有$\frac 1 p $加起来相当于必须抽到一张卡牌后才能抽到另一张,这样是不对的。

但是这样启示我们可以容斥,根据一些显然的概率原理(如果你不承认就右上角),出现\(1\)或者\(2\)号卡牌的概率是\(p_1+p_2\)。那么,\(\frac 1 {p_1+p_2}\)的意思是,我抽到一张\(1\)或者\(2\)的期望次数。那么,抽到一张\(1\)和一张\(2\)的期望次数就是

\[1/p_1+1/p_2-1/(p_1+p_2)
\]

为什么我们的期望里要减去\(1/(p_1+p_2)\),因为我抽\(1\)的时候可能抽出\(2\),会省下一点期望,这个期望具体的值就是\(1/(p_1+p_2)\)(看不懂就右上角)。

所以我们就可以愉快地容斥了

\[E(A)=\sum_{t \subseteq U}(-1)^{|t|}(\frac 1 {\sum _{p \in t}p})
\]

实际上,这个式子就是\(min-max\)容斥。

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=25;
int num[maxn],n;
long double ans;
long double p[maxn]; int main(){
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
num[1]=1;
for(register int t=2;t<maxn;++t)
num[t]=num[t-1]<<1;
while(~scanf("%ds",&n)){
for(register int t=1;t<=n;++t)
scanf("%Lf",&p[t]);
for(register int t=1,edd=1<<n;t<edd;++t){
long double delt=0;
register int cnt=0;
for(register int i=1;i<=n;++i)
if(t&num[i]){
delt+=p[i];
++cnt;
}
if(cnt&1) ans+=1.0/delt;
else ans-=1.0/delt;
}
printf("%.4Lf\n",ans);
ans=0;
}
return 0;
}

Card Collector(期望+min-max容斥)的更多相关文章

  1. $HDU$ 4336 $Card\ Collector$ 概率$dp$/$Min-Max$容斥

    正解:期望 解题报告: 传送门! 先放下题意,,,已知有总共有$n$张卡片,每次有$p_i$的概率抽到第$i$张卡,求买所有卡的期望次数 $umm$看到期望自然而然想$dp$? 再一看,哇,$n\le ...

  2. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  3. HDU4336 Card Collector(期望 状压 MinMax容斥)

    题意 题目链接 \(N\)个物品,每次得到第\(i\)个物品的概率为\(p_i\),而且有可能什么也得不到,问期望多少次能收集到全部\(N\)个物品 Sol 最直观的做法是直接状压,设\(f[sta] ...

  4. P4707-重返现世【dp,数学期望,扩展min-max容斥】

    正题 题目链接:https://www.luogu.com.cn/problem/P4707 题目大意 \(n\)个物品,每次生成一种物品,第\(i\)个被生成的概率是\(\frac{p_i}{m}\ ...

  5. LOJ2542. 「PKUWC2018」随机游走【概率期望DP+Min-Max容斥(最值反演)】

    题面 思路 我们可以把到每个点的期望步数算出来取max?但是直接算显然是不行的 那就可以用Min-Max来容斥一下 设\(g_{s}\)是从x到s中任意一个点的最小步数 设\(f_{s}\)是从x到s ...

  6. HDU 4336 Card Collector 期望dp+状压

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4336 Card Collector Time Limit: 2000/1000 MS (Java/O ...

  7. UOJ449. 【集训队作业2018】喂鸽子 [概率期望,min-max容斥,生成函数]

    UOJ 思路 由于最近养成的不写代码的习惯(其实就是懒),以下式子不保证正确性. 上来我们先甩一个min-max容斥.由于每只鸽子是一样的,这只贡献了\(O(n)\)的复杂度. 现在的问题转化为对于\ ...

  8. hdu 4336 Card Collector(期望 dp 状态压缩)

    Problem Description In your childhood, people in the famous novel Water Margin, you will win an amaz ...

  9. [Codeforces235D]Graph Game——概率与期望+基环树+容斥

    题目链接: Codeforces235D 题目大意:给出一棵基环树,并给出如下点分治过程,求点数总遍历次数的期望. 点分治过程: 1.遍历当前联通块内所有点 2.随机选择联通块内一个点删除掉 3.对新 ...

随机推荐

  1. zabbix监控php-fpm

    1.启用php-fpm的状态功能 [root@web01 ~]# vim /etc/php-fpm.d/www.conf 121 pm.status_path = /php_status [root@ ...

  2. 在项目中引用android.support.v7

    在Android开发中,新建的项目可能因为缺少对sopport工程的引用而报错,可以这样解决. 1.项目右键 --> import --> Android --> Existing ...

  3. 系统封装 EasyBoot如何将WIN7安装版提取到光盘

    1 将WIN7光盘中的文件提取到Easyboot根目录,注意不要autorun.inf和setup.exe这两个文件.我们这里的Easyboot已经有了一些其他东西(XP的安装版文件,PE的文件等等, ...

  4. PS如何精确设置参考线,标尺,辅助线

    如图所示,我要均分画布的垂直方向为三份.因为要图标的三个位置文件吻合的很精确.我们先拉好头尾两条辅助线 在标尺上右击可以切换显示的单位,但是还是不够精确.因为这个画布是64×192的.我要64×64给 ...

  5. 迭代器适配器(一)back_inserter和front_inserter的实现

    本文讨论back_inserter和front_inserter的实现. 当我们调用copy函数的时候,要确保目标容器具有足够大的空间,例如: //将other的所有元素拷贝到以coll.begin( ...

  6. 标准库priority_queue的一种实现

    优先级队列相对于普通队列,提供了插队功能,每次最先出队的不是最先入队的元素,而是优先级最高的元素. 它的实现采用了标准库提供的heap算法.该系列算法一共提供了四个函数.使用方式如下: 首先,建立一个 ...

  7. vue 的 起手式

    代码: vue.js // vue 起手势 (function(root,factory) { root.Vue = factory(); })(this,function(){ // 设置基础的默认 ...

  8. ubuntu安装rpm格式软件包

    转载自:http://os.51cto.com/art/200708/53942.htm ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb.用alien转 ...

  9. ar命令提取.o的时候报错:is a fat file (use libtool(1) or lipo(1) and ar(1) on it)

    在解压.a文件的时候,报错:s a fat file (use libtool(1) or lipo(1) and ar(1) on it),原因是该.a文件包含了多个cpu架构,比如armv7,ar ...

  10. linux下 apache启动、停止、重启命令

    假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令:推荐/usr/local/apache2/bin/apachectl start apa ...