HDU.5985.Lucky Coins(概率DP)
\(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]\).
\]
我想问为什么存下 \(g[i][j]=1-f[i][j]\),计算用 \(g[][]\)就对,而不存直接用 \(1-f[][]\)这个式子答案怎么需要+1。。(精度?)
//0MS 1564K
#include <cstdio>
#include <cctype>
#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;
}
HDU.5985.Lucky Coins(概率DP)的更多相关文章
- HDU 5985 Lucky Coins 数学
Lucky Coins 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5985 Description Bob has collected a lot ...
- HDU5985 Lucky Coins 概率dp
题意:给你N种硬币,每种硬币有Si个,有Pi 概率朝上,每次抛所有硬币抛起,所有反面的拿掉,问每种硬币成为最后的lucky硬币的概率. 题解:都知道是概率dp,但是模拟赛时思路非常模糊,很纠结,dp[ ...
- HDU 5985 Lucky Coins(概率)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5985 题意:有多种类型的硬币,每种类型的硬币都有一定的数量,现在每次抛硬币,除去朝下的硬币,知道最后 ...
- HDU 4089 Activation(概率DP)(转)
11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况. 像概率dp,公式推出来就很容易写 ...
- atcoderI - Coins ( 概率DP)
I - Coins Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement Let NN b ...
- 2017 ICPC乌鲁木齐 A Coins 概率dp
Coins 题意:一开始所有n个硬币都是反面朝上的,每次必须拿k个来抛,抛的人足够聪明,问m次之后向上的硬币的期望. 首先说了这个足够聪明的意思,就是只要向反面的有k个就不会sb地去拿向正面的来抛,想 ...
- 2017 ICPC Asia Urumqi A.coins (概率DP + 期望)
题目链接:Coins Description Alice and Bob are playing a simple game. They line up a row of nn identical c ...
- HDU 4405 Aeroplane chess (概率DP)
题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i 这个位置到达 n ...
- HDU - 5001 Walk(概率dp+记忆化搜索)
Walk I used to think I could be anything, but now I know that I couldn't do anything. So I started t ...
随机推荐
- 翻译:探索GLSL-用几何着色器(着色器库)实现法线可视化
翻译:探索GLSL-用几何着色器(着色器库)实现法线可视化 翻译自: Exploring GLSL – Normal Visualizer with Geometry Shaders (Shader ...
- 原始套接字-TCP/IP下三层数据显示
#include <stdio.h> #include <errno.h> #include <unistd.h> #include <sys/socket. ...
- 一个很实用的css3兼容工具很多属性可以兼容到IE6
当你看到这样的效果图是不是已经崩溃了 css3没出来之前大部分人基本都是用图片的方式拼出来的 腾讯邮箱就是这么做的 然后你想和设计说换直角吧.我用图片的好烦的感觉!而且我们还要兼容到ie6 她和你说别 ...
- 20155338 2016-2017-2 《Java程序设计》第6周学习总结
20155338 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 输入和输出 • 串流设计概念 要想活用输入/输出API,一定先要了解Java中如何以串流抽象 ...
- HttpClient与HttpUrlConnection下载速度比较
Android有两套http的API,刚开始使用网络编程时多少有些迷惑到底用哪个好呢?其实孰优孰劣无需再争论,google已经指出HttpUrlConnection是Android更优的选择,并在SD ...
- spring如何管理mybatis(二) ----- SqlSession的线程安全性
在之前的文章中我们了解到最终的数据库最终操作是走的代理类的方法: @Override public Object invoke(Object proxy, Method method, Object[ ...
- python內建模块之datetime
from:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193755 ...
- JDK1.8源码hashMap
一.概念 允许key为null,value为null:线程不安全:不保证映射的顺序:迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数) ...
- docker之安装和管理mongodb
前言 折腾一些使用docker来配置和管理mongodb和mongodb集群. 安装mongodb 从docker网站拉取mongodb镜像 docker search mongo # 选择一个版本 ...
- 关于Spring 事务管理传播属性的配置及作用-嵌套事务
先了解事务的7种传播属性: PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. PROPAGATION_SUPPORTS -- 支持当前 ...