uestc1135邱老师看电影【概率dp】

在一场由邱老师和其妹子决定听谁的话的游戏里,通过抓取白鼠和黑鼠来决定胜利者。玩家需要理解概率计算,了解如何在有限的尝试中赢得游戏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

邱老师看电影

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
 

一天邱老师心血来潮想去看电影,但是邱老师的妹子想去逛街,他们谁也没有办法说服对方,于是准备来玩一个游戏来决定听谁的。

邱老师找来w只白鼠和b只黑鼠,邱老师和妹子轮流从袋子里面抓老鼠,谁先抓到白色老鼠谁就赢。

但是有酱神在旁边捣乱,邱老师每抓一只老鼠出来,酱神就偷偷的也从里面抓一只出来,这3个人抓出来的老鼠都是随机的。

如果袋子里没有白老鼠,且之前没有人拿到白老鼠的时候,邱老师胜。

为了体现绅士精神,邱老师让妹子先抓,那么妹子赢的概率是多少呐?

Input

只有两个数字 w和b w<=1000 b<=1000

Output

输出妹子赢的概率 保留9位小数

Sample input and output

Sample Input Sample Output
1 3
0.500000000
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<list>
#include<vector>
#include<queue>
using namespace std;
double dp[1010][1010];
double dfs(int w,int b)
{
    if(w==0) return 0;
    if(b==0&&w!=0) return 1;
    if(dp[w][b]>=0) return dp[w][b];
    dp[w][b]=w*1.0/(w+b);
    if(b>=2){//要想在下一次取胜则本次学妹应该拿走一个黑鼠邱也必须拿走一个白鼠酱神可以任意拿走一个白鼠或一个黑鼠 
        double tb=b*1.0/(w+b)*(b-1)*1.0/(w+b-1);
        if(b>=3)
            dp[w][b]+=tb*dfs(w,b-3)*(b-2)*1.0/(w+b-2);//酱神拿走黒鼠
        if(w>=1)
            dp[w][b]+=tb*dfs(w-1,b-2)*(w*1.0)/(w+b-2);//酱神拿走白鼠
    }
    return dp[w][b];
}
int main()
{
    int w,b;
    scanf("%d%d",&w,&b);
    memset(dp,-1,sizeof(dp));
    printf("%.9f\n",dfs(w,b));
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值