zoukankan      html  css  js  c++  java
  • UVA11427 Expect the Expected 概率dp+全概率公式

    题目传送门

    题意:小明每晚都玩游戏,每一盘赢的概率都是p,如果第一盘就赢了,那么就去睡觉,第二天继续玩;否则继续玩,玩到赢的比例大于p才去睡;如果一直玩了n盘还没完成,就再也不玩了;问他玩游戏天数的期望;

    思路:由于每次玩游戏,每天玩游戏都是独立重复试验,所以可以考虑一天玩游戏,玩不到p的概率(p都玩不到?)。

      设$dp[i][j]$表示玩了i次游戏,获胜j次,并且过程中期望都不会超过p的概率。

      则显然有:$dp[i][j]=dp[i-1][j]*(1-p)+dp[i-1][j-1]*p$。

       需要注意的是,我们必须保证过程中游戏分数的期望不会超过p,所以每一个状态都必须是$frac{j}{i}<p$,而且由于是T组样例,记得每次都要清空dp数组,否则上一次的答案可能会影响当前这次(上一次不合法的状态到了这一次变成合法状态了,被统计入了答案)。

      然后求出总的失败概率,设概率为q,期望天数为e。

      由全概率公式可得$e=q*1+(1-q)*(e+1)$

      移项得$e=frac {1}{q}$

    #pragma GCC optimize (2)
    #pragma G++ optimize (2)
    #pragma comment(linker, "/STACK:102400000,102400000")
    #include<bits/stdc++.h>
    #include<unordered_map>
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define dep(i,b,a) for(int i=b;i>=a;--i)
    #define clr(a,b) memset(a,b,sizeof(a))
    #define pb push_back
    #define pii pair<int,int >
    using namespace std;
    typedef long long ll;
    ll rd()
    {
        ll x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int maxn=110;
    double dp[maxn][maxn];
    int x,y,n;
    int main(){
        int T,cat=1;
        cin>>T;
        while(T--){
            scanf("%d/%d%d",&x,&y,&n);
            double p=(double)x/y;
            clr(dp,0);
            dp[0][0]=1;
            rep(i,1,n){
                for(int j=0;j*y<=i*x;j++){
                    dp[i][j]=dp[i-1][j]*(1-p);
                    if(j)dp[i][j]+=dp[i-1][j-1]*p;
                }
            }
            double res=0;
            for(int i=0;i*y<=n*x;i++){
                    res+=dp[(int)n][i];
            }
            printf("Case #%d: %d
    ",cat++,(int)(1/res));
        }
    } 
  • 相关阅读:
    如何自定义一个通信协议
    c++ 如何编写接口类(interface)
    QT国际化(中英转换)
    QT中文乱码与国际化支持
    frp官方中文文档
    K3 LEDE固件更改FRP客户端版本
    Linux下的tar压缩解压缩命令详解
    QT入门系列(3):控制台输出QString
    Delphi、Lazarus保留字、关键字详解
    使用TortoiseSVN的客户端钩子脚本触发Jenkins构建
  • 原文地址:https://www.cnblogs.com/mountaink/p/11452272.html
Copyright © 2011-2022 走看看