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

UVA 11427 (概率DP+期望)

时间:2015-02-10 00:27:53      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

题目链接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\n",++no,int(1/q));
    }
}

 

UVA 11427 (概率DP+期望)

标签:

原文地址:http://www.cnblogs.com/neopenx/p/4282768.html

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