博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
期望dp-hdu-4336-Card Collector
阅读量:6971 次
发布时间:2019-06-27

本文共 625 字,大约阅读时间需要 2 分钟。

题目链接:

题目大意:

有n种卡片,每包中至多有一种卡片,概率分别为p1,p2,...pn,可能有的没有卡片,求包数的期望,使得每种卡片都有。

解题思路:

由于n最多只有20,可以进行状态压缩。

dp[i]表示在状态i获得的卡片的情况下,得到最后结果所需的包数期望。

则dp[i]=no*(dp[i]+1)+∑pp[j]*(dp[i]+1)+∑pp[k]*(dp[i|(1<<k)]+1).

no:表示没有卡片的概率,∑pp[j]表示第j种卡片已经存在,∑pp[k]表示第j种卡片当前还没有。显然no+∑pp[j]+∑pp[k]=1,所以花间得dp[i]=1+(no+∑pp[j])*dp[i]+∑pp[k]*dp[i|(1<<k)]

dp[1<<n-1]=0递推求出dp[0]即可。

代码:

#include 
#include
using namespace std;double dp[1<<20],pp[25];int main(){ int n; while(~scanf("%d",&n)) { double no=0; for(int i=0;i
=0;i--) { dp[i]=1; double temp=0.0; for(int j=0;j

 

 

转载地址:http://frasl.baihongyu.com/

你可能感兴趣的文章
PAT_A1076#Forwards on Weibo
查看>>
黑马程序员博客-------面向对象
查看>>
Python 类 面向对象(Classes)
查看>>
如何完全卸载(Mac&Windows)office 365 ProPlus
查看>>
android实战开发02
查看>>
网络中的连接设备
查看>>
业务逻辑:完成基于CRM地址完全匹配的自动分单业务逻辑
查看>>
2019校招面经大汇总
查看>>
[CSS]滚动条样式设置
查看>>
转://oracle 软件的收费模式
查看>>
JDBC
查看>>
Python中的property
查看>>
栈的题目
查看>>
Java支持多继承么?
查看>>
LeetCode 475. Heaters
查看>>
caffe学习--cifar10学习-ubuntu16.04-gtx650tiboost--1g--01
查看>>
转载--一个关于操作系统不断更新迭代的秘密
查看>>
ajax跨域请求的问题
查看>>
mybatis批量保存的两种方式(高效插入)
查看>>
LA 3644 易爆物
查看>>