zoukankan      html  css  js  c++  java
  • UVA 11427 (概率DP+期望)

    题目链接http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35396

    题目大意:每晚打游戏。每晚中,赢一局概率p,最多玩n局,如果最后不能保证胜率大于p,则从此不玩。问打游戏的天数的期望。

    解题思路

    首先分析每天晚上的。

    设f[i][j]为前i天,已经赢j局的概率。

     由全概率公式,那么当天晚上完蛋的概率q=f[n][0]+f[n][1]+.....f[n][终止条件].

    至于为什么从完蛋(输)的角度考虑,主要是由于n局的条件存在,最多n局很容易解,而n局中赢局的最大递推范围,就是0~( j/i<=a*i)

    若从当晚不完蛋的角度考虑,则赢局的范围不好确定。

    最后每天晚上完蛋概率q=f[n][0~n],(后面没推是0,所以这里偷懒取n就行)

     

    打游戏的天数问题,是个离散型期望问题。

    X 1 2 3 4 5
    P Q Q(1-Q) Q*(1-Q)^2 Q*(1-Q)^3 Q*(1-Q)^4
    EX 1*Q 2*Q(1-Q) 3*Q*(1-Q)^2 4*Q*(1-Q)^3 5*Q*(1-Q)^4

    则EX=Q+2*Q(1-Q)+3*Q*(1-Q)^2+.....

    是个无穷级数,不好求和。

    对这个数列进行变形:设x=EX/Q,则x=1+2(1-Q)+3*(1-Q)^2+..., ①

                                                    则(1-Q)x=(1-Q)+2*(1-Q)^2+... ②

    ①-②=EX=Qx=1+(1-Q)+(1-Q)^2+.... ,设1-Q=K

    对这个等比数列求和,EX=lim (1-K^n)/(1-K)=1/(1-K)=1/Q。

    还有一种奇葩的思考方式,设最后期望为e。

    设事件A为第一天完蛋。那么P(A=1):Q,期望是1。P(A=0):1-Q,期望e+1,e=Q+(1-Q)*(e+1),e=1/Q.

    至于为什么第一天不完蛋则期望是e+1。(=。=暂时没想出来)

    #include "cstdio"
    #include "cstring"
    #define maxn 105
    double f[maxn][maxn];
    int main()
    {
        //freopen("in.txt","r",stdin);
        int T,n,a,b,no=0;
        double p;
        scanf("%d",&T);
        while(T--)
        {
            memset(f,0,sizeof(f));
            scanf("%d/%d%d",&a,&b,&n);
            p=(double)a/b;
            f[0][0]=1;f[0][1]=0;
            for(int i=1;i<=n;i++)
              for(int j=0;j*b<=a*i;j++)
            {
                if(!j) f[i][j]=f[i-1][j]*(1-p);
                else f[i][j]=f[i-1][j]*(1-p)+f[i-1][j-1]*p;
            }
            double q=0;
            for(int i=0;i<=n;i++) q+=f[n][i];
            printf("Case #%d: %d
    ",++no,int(1/q));
        }
    }
  • 相关阅读:
    day24 Pyhton学习 反射
    正则表达式练习
    day23 Pyhton学习 昨日回顾.re模块.序列化模块
    day22 函数整理
    day22 Pyhton学习 re模块和正则表达式
    day21 Pyhton学习 模块
    函数整理
    一个关于浮点数运算需要注意的地方
    关于逻辑运算案例笔记
    数据的表现形式和进制之间的转换
  • 原文地址:https://www.cnblogs.com/neopenx/p/4282768.html
Copyright © 2011-2022 走看看