hdu 1204 糖果大战 (Markov Chains求期望)

糖果大战

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 2336    Accepted Submission(s): 797

Problem Description

生日Party结束的那天晚上,剩下了一些糖果,Gandon想把所有的都统统拿走,Speakless于是说:“可以是可以,不过我们来玩24点,你不是已经拿到了一些糖果了吗?这样,如果谁赢一局,就拿走对方一颗糖,直到拿完对方所有的糖为止。”如果谁能算出来而对方算不出来,谁就赢,但是如果双方都能算出或者都不能,就算平局,不会有任何糖果的得失。

Speakless是个喜欢提前想问题的人,既然他发起了这场糖果大战,就自然很想赢啦(不然可就要精光了-_-)。现在他需要你的帮忙,给你他每局赢的概率和Gardon每局赢的概率,请你给出他可能获得这场大战胜利的概率。

Input

每行有四个数,Speakless手上的糖果数N、Gardon手上的糖果数M(0<=N,M<=50)、一局Speakless能解答出来的概率p、一个问题Gardon能解答出来的概率q(0<=p,q<=1)。

Output

每行一个数,表示Speakless能赢的概率(用百分比计算,保留到小数点后2位)。

Sample Input

50 50 0.5 0.5
10 10 0.51 0.5
50 50 0.51 0.5

Sample Output

0.50
0.60
0.88

用f[i]表示Speakless有i颗糖果的时赢的概率,则f[i]=p(1-q)*f[i+1]+q(1-p)*f[i-1]+(1-p*(1-q)-q*(1-p))*f[i];

这个方程表示当前状态赢的期望等于当前状态能到达的所有状态赢的期望的和。化简得,

(f[i+1]-f[i-1])*p*(1-q)=f[i]-f[i-1]*(q*(1-p));

令k=(q*(1-p))/(p*(1-q));

设f[i+1]-f[i]= (f[i]-f[i-1])*k;

已知 f[0]=0;f[n+m]=1;
(必输和必赢)

f[1]-f[0]=f[1];

f[2]-f[1]=(f[1])*k;

f[3]-f[2]=(f[2]-f[1])*k=f[1]*k^2;

...

f[n]-f[n-1]=(f[n-1]-f[n-1])*k=f[1]*k^(n-1);

对数列求和,得

f[n]=(1-k^n)/(1-k);

f[n+m]=(1-k^(n+m))/(1-k)=1;

则f[n]=f[n]/f[n+m]=(1-k^n)/(1-k^(n+m));

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
using namespace std;
#define ll long long
#define N 25
const int M=256;
const double eps=1e-4;

int main()
{
    int n,m,n1,n2,i;
    double k,s,p,q;
    while(~scanf("%d%d%lf%lf",&n,&m,&p,&q))
    {
        if(m==0)
            s=1;
        else if(n==0||p==0||q==1)
            s=0;
        else
        {
            k=q*(1-p)/p/(1-q);
            if(fabs(k-1.0)<eps)  //此时用pow分母基本等于零,会出错
                s=n*1.0/(n+m);
            else
                s=(1.0-pow(k,n))/(1.0-pow(k,(n+m)));
        }
        printf("%.2f\n",s);
    }
    return 0;
}
时间: 2024-08-24 13:50:41

hdu 1204 糖果大战 (Markov Chains求期望)的相关文章

hdu 1204 糖果大战

Problem Description 生 日Party结束的那天晚上,剩下了一些糖果,Gandon想把所有的都统统拿走,Speakless于是说:"可以是可以,不过我们来玩24点,你不是 已经拿到了一些糖果了吗?这样,如果谁赢一局,就拿走对方一颗糖,直到拿完对方所有的糖为止."如果谁能算出来而对方算不出来,谁就赢,但是如果双方都能 算出或者都不能,就算平局,不会有任何糖果的得失. Speakless是个喜欢提前想问题的人,既然他发起了这场糖果大战,就自然很想赢啦(不然可就要精光了-_

HDU 4050 wolf5x (概率DP 求期望)

题意:有N个格子,1~N,起点在0,每个格子有一个状态(0,1,2,3),每次可以跨[a,b]步, 问走完N个格子需要步数的期望,每次尽量走小的步数,即尽量走a步,不能则走a+1,-- 状态0意味着你不能踏进对应的网格. 状态1意味着你可以??步入网格用你的左腿. 状态2意味着你可以??步入网格用你的右腿. 状态3意味着你可以进入网格用任何你的腿,而接下来的步骤中,您可以使用任何的腿;即你不需要遵循上述规则. 思路:借鉴了各路大神的思想理解了下. dp[i][j] :表示走到第 i 个格子在 j

HDU 4035:Maze 概率DP求期望(有环)

Maze 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意: 有N(2 ≤ N ≤ 10000)个房间和一堆双向边(不存在环),每个房间有ki和ei两个值,分别代表回到房间1和游戏结束的概率,求游戏结束时通过的边数的期望 题解: 一道很好很经典的求期望的题 设E[i]为以i为起点,直到游戏结束所通过边数的期望,则E[1]即所求答案 设fa代表父亲节点(由于不存在环,则图为一棵树,设1为根节点),∑ch代表所有孩子节点,size代表与这

HDU 3853 LOOPS(概率dp求期望啊)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 Problem Description Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl). Homura wants to help her friend Madoka save the world. But because of the plot of the Boss Incubator, she is trapped in

hdu 4405 Aeroplane chess(概率DP 求期望__附求期望讲解方法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4405 Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz starts at grid 0. For each step he throws a dice(a dice have six faces with equal p

hdu 4870 Rating(高斯消元求期望)

http://acm.hdu.edu.cn/showproblem.php?pid=4870 题意:有两个号,初始分数都是0,每次选一个分数较小的打比赛,如果分数一样任选一个,有p的概率涨50分,最高为1000分,有1-p的概率跌100分,最低为0分.问有一个号涨到1000需要打比赛的次数的期望. 令(x, y)表示高分为x,低分为y的状态(x >= y),E(x, y)表示从(x, y)到达(1000, ?)的比赛场数期望.容易得到E(x, y) = P * E(x1, y1) + (1 - 

HDU 3853 LOOPS(概率dp 求期望)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 Problem Description Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl). Homura wants to help her friend Madoka save the world. But because of the plot of the Boss Incubator, she is trapped in

HDU 4403(Aeroplane chess ,求期望,概率DP)

Aeroplane chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz starts at grid 0. For each step he

hdu 2262 高斯消元求期望

Where is the canteen Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1070    Accepted Submission(s): 298 Problem Description After a long drastic struggle with himself, LL decide to go for some