Uva(11427)(Expect the Expected)

链接:https://vjudge.net/problem/UVA-11427
思路:由于每天是独立的,所以期望就是一天概率的倒数(很好证明),关键是一天的概率不太好算,因为涉及到当前的状态的判断(即总比例是否超过p),所以我们考虑到了概率中的动态规划。用pp[i][j]表示一共玩了i天赢了j天的状态,i>j是不存在的所以全部为0,然后概率大于p的也全都为0,如果当前i,j概率小于p,那么状态转移pp[i][j] = pp[i-1][j](1-p) + pp[i-1][j-1]p,注意j=0的时候要特殊处理一下即可,最后算0-n的总和,表示这n天总共失败的概率,即可算出成功概率,倒一下就是期望。
代码:

#include<bits/stdc++.h>
using namespace std;
int t,n;
double p;
double pp[110][110];

int main(){
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int kase = 0;
    scanf("%d",&t);
    while(t--){
        memset(pp,0,sizeof(pp));
 int now1,now2;
        scanf("%d/%d%d",&now1,&now2,&n);//这种输入方法有点妙学习一下
    pp[0][0] = 1;
    pp[0][1] = 0;
    p = 1.0*now1/now2;
    for(int i=1;i<=n;i++){
    for(int j=0;j*now2<=i*now1;j++){
        pp[i][j] = pp[i-1][j]*(1-p);
        if(j)pp[i][j]+=pp[i-1][j-1]*p;   //j=0防止越界要特判
  
    }
}
double res = 0;
for(int i=0;now2*i<=n*now1;i++){
    res+=pp[n][i];
}
printf("Case #%d: %d\n",++kase,(int)(1/res));
}
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,415评论 0 2
  • “如果我喜欢你 我会主动往你的方向走几步再走几步 如果你看见我走过来了 却没有迎接我的意思 那我就会停下来了 世界...
    郭霞IN阅读 129评论 0 1
  • 讲课 骑天大胜 焦点少年班坚持分享第292天 星期五 2018.5.11 昨天,我向老师提出建议,因为老师的嗓子有...
    骑天大胜阅读 184评论 0 1
  • 别跟命运较劲。 老是自命不凡,认为老天就是派我来拯救世界的,所有人都要为我让路。所以每次都要受伤害,因为别人的一句...
    秦皇上阅读 144评论 0 0