[COGS 1489]玩纸牌:期望

点击这里查看原题

f[i][j]表示玩i局赢j局的概率,则f[i][j]=f[i-1][j] * (1-p)+f[i-1][j-1] * p,于是对于每天而言,失败的概率q为f[n][i] (0<=i<=a*n/b)。
可以得到,第一天失败的概率为q,第二天失败的概率为(1-q) * q,第三天失败的概率为(1-q)^2 * q……
因此,总的期望ex=q * 1+ (1-q) * q * 2+(1-q)^2 * q * 3+……
令s=ex/q=1+(1-q) * 2+(1-q) ^2 * 3+……
(1-q)s=(1-q)+(1-q)^2 * 2+(1-q)^3 * 3+……
s-(1-q)s=1+(1-q)+(1-q)^2……
qs=ex=1+(1-q)+(1-q)^2……
是一个等比数列,项数趋于正无穷时,总和为a1/(1-q),因此,ex=1/q

/*
User:Small
Language:C++
Problem No.:11427
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
int a,b,n;
double q,f[105][105],p;
void solve(){
    scanf("%d/%d%d",&a,&b,&n);
    p=1.0*a/b;
    memset(f,0,sizeof(f));
    f[0][0]=1;
    f[0][1]=0;
    for(int i=1;i<=n;i++){
        for(int j=0;b*j<=a*i;j++){
            f[i][j]=f[i-1][j]*(1-p);
            if(j) f[i][j]+=f[i-1][j-1]*p;
        }
    }
    q=0;
    for(int i=0;b*i<=a*n;i++) q+=f[n][i];
    printf("%d\n",(int)(1/q));
}
int main(){
    freopen("data.in","r",stdin);//
    int t;
    cin>>t;
    for(int i=1;i<=t;i++){
        cout<<"Case #"<<i<<": ";
        solve();
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值