码迷,mamicode.com
首页 > 其他好文 > 详细

【bzoj2318】Spoj4060 game with probability Problem

时间:2016-12-20 20:04:03      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:font   等于   sample   nbsp   硬币   problem   多少   color   can   

题目描述

Alice和Bob在玩一个游戏。有n个石子在这里,Alice和Bob轮流投掷硬币,如果正面朝上,则从n个石子中取出一个石子,否则不做任何事。取到最后一颗石子的人胜利。Alice在投掷硬币时有p的概率投掷出他想投的一面,同样,Bob有q的概率投掷出他相投的一面。

现在Alice先手投掷硬币,假设他们都想赢得游戏,问你Alice胜利的概率为多少。

输入

第一行一个正整数t,表示数据组数。

对于每组数据,一行三个数n,p,q。

输出

对于每组数据输出一行一个实数,表示Alice胜利的概率,保留6位小数。 

样例输入

1
1 0.5 0.5

样例输出

0.666667

提示

数据范围:1<=t<=500.5<=p,q<=0.99999999对于100%的数据 1<=n<=99999999
题解
概率dp
这题真是巨坑。。。
f[i]表示i块石头先投者获胜的概率,g[i]表示i块石头后投者获胜的概率。
易推出  f[i]=(p0*g[i-1]+(1-p0)*q0*f[i-1])/(1-(1-p0)*(1-q0))
          g[i]=(q0*f[i-1]+(1-q0)*p0*g[i-1])/(1-(1-p0)*(1-q0))
然而这里p0和q0都是目标概率,而题目中的p和q都是几率,
所以需要根据情况决定是否想要正面朝上。
当f[i-1]<g[i-1]时,都想要正面朝上,p0=p,q0=q;
当f[i-1]>g[i-1]时,都不想要正面朝上,p0=1-p,q0=1-q。
但是n太大肿么办?
于是用到概率黑科技:
当n越来越大时,f[n]逐渐趋近于一个定值,而且题目中只要求保留6位小数。
所以就此题而言f[1000+k]可以近似等于f[1000]。
于是时间复杂度就降为O(1000T),可解。
 1 #include <cstdio>
 2 #include <cstring>
 3 double f[1001] , g[1001];
 4 int main()
 5 {
 6     int t;
 7     scanf("%d" , &t);
 8     while(t -- )
 9     {
10         int n , i;
11         double p , q;
12         scanf("%d%lf%lf" , &n , &p , &q);
13         memset(f , 0 , sizeof(f));
14         memset(g , 0 , sizeof(g));
15         if(n > 1000)
16             n = 1000;
17         f[0] = 0;
18         g[0] = 1;
19         for(i = 1 ; i <= n ; i ++ )
20         {
21             if(f[i - 1] > g[i - 1])
22                 p = 1 - p , q = 1 - q;
23             f[i] = (p * g[i - 1] + (1 - p) * q * f[i - 1]) / (1 - (1 - p) * (1 - q));
24             g[i] = (q * f[i - 1] + (1 - q) * p * g[i - 1]) / (1 - (1 - p) * (1 - q));
25             if(f[i - 1] > g[i - 1])
26                 p = 1 - p , q = 1 - q;
27         }
28         printf("%.6lf\n" , f[n]);
29     }
30     return 0;
31 }
 

【bzoj2318】Spoj4060 game with probability Problem

标签:font   等于   sample   nbsp   硬币   problem   多少   color   can   

原文地址:http://www.cnblogs.com/GXZlegend/p/6203870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!