CoderForce 148D-Bag of mice (概率DP求概率)

题目大意:美女与野兽在玩画鸽子的游戏。鸽子在用黑布遮住的笼子里,白色的有w只,黑色的有b只,每次拿出一只作画,谁先画到白色的鸽子谁就赢。美女首先画,因为野兽太丑,它每次画的时候都会吓跑一只鸽子,所有出笼子的鸽子都不在进去。求美女赢得概率。(设定假如没有人画到白色鸽子,算野兽赢)。

题目分析:这道题不难,很显然的概率DP。这是我第一次写概率DP,纪念一下。。。

 

代码如下:

# include<iostream>
# include<cstdio>
# include<vector>
# include<list>
# include<queue>
# include<cstring>
# include<set>
# include<map>
# include<string>
# include<cmath>
# include<algorithm>
using namespace std;

double dp[1005][1005];

double DP(int w,int b)
{
    if(dp[w][b]!=-1.0) return dp[w][b];
    if(w<=0) return dp[w][b]=0.0;
    if(b<=0) return dp[w][b]=1.0;
    double res1=(double)w/(double)(w+b);
    double res2=((double)b/(double)(w+b))*((double)(b-1)/(double)(w+b-1));
    double t=0.0;
    if(b-2>0)
        t+=((double)(b-2)/(double)(w+b-2))*DP(w,b-3);
    if(w-1>0)
        t+=((double)(w)/(double)(w+b-2))*DP(w-1,b-2);
    res2*=t;
    return dp[w][b]=res1+res2;
}

int main()
{
    int w,b;
    while(~scanf("%d%d",&w,&b))
    {
        for(int i=0;i<=w;++i)
            for(int j=0;j<=b;++j)
                dp[i][j]=-1.0;
        printf("%.9lf\n",DP(w,b));
    }
    return 0;
}

  

转载于:https://www.cnblogs.com/20143605--pcx/p/5180592.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值