hdu1204(Markov过程,赌徒输光问题变形)

题目链接:糖果大战



hdu1204(Markov过程,赌徒输光问题变形)_第1张图片

hdu1204(Markov过程,赌徒输光问题变形)_第2张图片


回到本题:

本题是赌徒问题的变形,增加了平局的情况,设f(i)是从状态i出发到达n+m状态先于到达0状态的概率

考虑从i出发后移动一步后的情况,以概率p(1-q)移动到j+1的假设下,到达n+m的概率为f(i+1)

同理,以概率q(1-p)移动到j-1的前提下,到达n+m的概率是f(i-1)

如果两人是平局,以概率1-p(1-q)-q(1-p)在点i,到达n+m的概率就是f(i)


全概率公式为


则上式化简为

由于f0表示从状态0出发到达n+m状态先于到达0状态的概率,从状态0出发此时已经先到达0状态,故f0=0,同理f(n+m)=1

hdu1204(Markov过程,赌徒输光问题变形)_第3张图片

整理得到


(2)/(1)得到

当λ≠1时,

当λ=1时,

要注意n=0,m=0,p=0和q=1的特殊情况,判断的顺序也要注意

代码:

#include 
#include 

using namespace std;
const double eps=1e-12;
int main()
{
    //freopen("in.txt","r",stdin);
    int n,m;
    double p,q,lambda;
    while(scanf("%d%d%lf%lf",&n,&m,&p,&q)!=EOF){
        if(n==0){//前三个判断的顺序
            printf("0.00\n");
            continue;
        }
        if(m==0){
            printf("1.00\n");
            continue;
        }
        else if(p==0.0||q==1.0){
            printf("0.00\n");
            continue;
        }
        lambda=q*(1-p)/p/(1-q);
        if(fabs(lambda-1.0)



你可能感兴趣的:(数学)