HDU 4336 集齐方便面卡片的期望-期望dp 或 容斥原理 -(二进制压缩辅助)

该博客介绍了一道HDU 4336题目,内容涉及集齐n种卡片的期望概率。通过分析,博主提出使用期望动态规划(dp)和二进制压缩的方法来解决,详细阐述了dp状态转移方程,并给出了从后往前的dp实现思路。此外,还提到了容斥原理在解决此类问题中的应用,解释了为何需要减去重叠部分的概率。
摘要由CSDN通过智能技术生成

题意:要集齐n种卡片,现已知每打开一袋方便面得到每种卡片的概率Pi,Pi的和小于等于1,求集齐这n种卡片需要买的方便面的期望。

分析:

一、期望dp,这题要用二进制压缩,这是很显然的。

状态:dp[i]现在已经收集了i种卡片到达收集所有卡片的期望。这个状态能转移到的状态有:1).dp[i](下次打开的方便面得到的卡片是已经收集过的);2).dp[i|(1<<j)](下次得到的未收集过的卡片)

所以方程:dp[i]=Pi * dp[i] + Pj * dp[i|(1<<j)] + 1.0(不要忘了+1)其中pi是所有抽到已经收集过的卡片的概率和加上方便面里什么卡片都没有的概率,也就是不抽没收集过的卡片的反面。

实现:从后往前,从最后一个状态的前一个开始往前推,结果就输出dp[0]

二、容斥原理

1/pi是把第i种卡片单独看,收集到它的期望,但是把所有的卡片单独的期望加起来是不对的,因为他们的期望有交叉的地方,所以要减去1/(pi+pj),很好理解,就是两个集合重叠的部分,那么为什么是相加呢,分析一下这个重叠部分:应该是得A不得B,或者得B不得A,由于不可能既得A又得B,所以刚才那两种情况的概率就是Pa+Pb,以此类推。

dp代码:

#include<iostream>
#include<cstdio>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值