博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU.5985.Lucky Coins(概率DP)
阅读量:5360 次
发布时间:2019-06-15

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

\(Description\)

有n(n<=10)种硬币,已知每种硬币的数量和它抛一次正面朝上的概率pi。进行如下过程:每次抛一次所有硬币,将正面朝下的硬币去掉。重复该过程直到只剩一种硬币或是没有硬币。

如果结束时还剩下一种硬币,那称它是 \(LuckyCoin\)。求每种硬币成为 \(LuckyCoin\) 的概率。

\(Solution\)

我们只需要枚举在第j轮,硬币i死亡(这个词形象233),其它硬币在第j轮之前死亡的概率。

由给出的概率及六位小数可以看出,枚举到100轮就很够了。于是可以dp计算每种硬币在第j轮死亡的概率,然后前缀和一下,枚举轮数。(据说复杂度有点高?不太懂,不深究了...)
\(f[i][j]\) 表示在第j轮 硬币i死亡的概率,那么 \(f[i][j] = (1-p_i^j)^{num_i}\) (\(num_i\)枚硬币都挂掉才死亡;算存活概率的话好像因为有多个很不好算)
\(g[i][j]\) 表示在第j轮之后 硬币i仍存活的概率,那么 \(g[i][j] = 1 - f[i][j]\).
为了不重复统计(在第j+1轮i存活,但却计算在第j轮之前就死亡的所有硬币),对于每轮我们用i在j轮还存活,j+1轮i全部挂掉的概率,即 \(g[i][j]-g[i][j+1]\).
\[Ans[i] = \sum_{j=1}^{100}(g[i][j]-g[i][j+1])*\prod_{k=1,k!=i}^nf[k][j]\]

我想问为什么存下 \(g[i][j]=1-f[i][j]\),计算用 \(g[][]\)就对,而不存直接用 \(1-f[][]\)这个式子答案怎么需要+1。。(精度?)

//0MS 1564K#include 
#include
#define gc() getchar()const int N=12;int n,num[N];double p[N],f[N][103],g[N][103];inline double FP(double x,int k)//第一次写double快速幂。。{ double t=1.0; for(; k; k>>=1,x=x*x) if(k&1) t=t*x; return t;}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1; i<=n; ++i) scanf("%d%lf",&num[i],&p[i]); if(n==1) {puts("1.000000"); continue;} for(int i=1; i<=n; ++i) { double pw=p[i]; for(int j=1; j<100; ++j,pw*=p[i]) f[i][j]=FP(1.0-pw,num[i]),g[i][j]=1-f[i][j]; } for(int i=1; i<=n; ++i) { double res=0; for(int j=1; j<100; ++j) { double pro=1.0; for(int k=1; k<=n; ++k) if(k!=i) pro*=f[k][j]; res += (f[i][j+1]-f[i][j])*pro;// res += (1-f[i][j]-1+f[i][j+1])*pro;// res += (g[i][j]-g[i][j+1])*pro; } printf("%f%c",res+1,i==n?'\n':' '); } } return 0;}

转载于:https://www.cnblogs.com/SovietPower/p/8661570.html

你可能感兴趣的文章
【Python3 爬虫】15_Fiddler抓包分析
查看>>
高性能JavaScript-JS脚本加载与执行对性能的影响
查看>>
关于标签之间因为换行等问题造成的空白间距问题处理
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>
[MFC][DShow]简单例子
查看>>
Luogu P1141 01迷宫【搜索/dfs】By cellur925
查看>>
js onclick事件传参
查看>>
WiCloud 商业Wi-Fi管理平台
查看>>
团队项目--未完待续
查看>>
双重标准,我该怎么解决
查看>>
python中的网页标签等字符处理
查看>>
Mybatis输入类型和结果类型
查看>>