codeforces148D

Posted pandaking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces148D相关的知识,希望对你有一定的参考价值。

a和b两个人玩游戏,一开始有w只白老鼠和b只黑老鼠,a先抓一只老鼠,然后b抓一只老鼠,由于b动作太大,会吓跑1只老鼠,谁先抓到一只白老鼠算赢,如果只有黑老鼠或者没有老鼠了算b赢,要你求出a胜出的概率:

感觉这题有点博弈的味道,但是其实是一道概率题!首先设还剩i只白老鼠和j只黑老鼠时a胜出的概率为dp[i][j],那么接下来要怎么推出它。

试想一下所有的情况:     1:a取出一只白老鼠,a胜出

                                       2:a取出一只黑老鼠,b取出一只黑老鼠,跑掉一只白老鼠

                                       3:a取出一只黑老鼠,b取出一只黑老鼠,跑掉一只白老鼠

                                     第4中情况不可能出现,因为这标志着a输了,而我们所设的状态的意思是a赢了,而且2,3表示的是平局,他还要加上a赢了的概率

接下来是ac代码:

                         

技术分享图片
 1 include<bits/stdc++.h>
 2 using namespace std;
 3 int w,b;
 4 double dp[1010][1010];
 5 int main(){
 6     scanf("%d%d",&w,&b);
 7     for(int i=1;i<=w;i++) dp[i][0]=1;
 8     for(int i=1;i<=w;i++){
 9         for(int j=1;j<=b;j++){
10             dp[i][j]=((1.0*i)/(i+j));
11             if(j>=3) dp[i][j]+=(1.0*j)/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3];
12             if(j>=2) dp[i][j]+=(1.0*j)/(i+j)*(j-1)/(i+j-1)*(i)/(i+j-2)*dp[i-1][j-2];
13         }
14     }
15     printf("%.9lf
",dp[w][b]);
16     return 0;
17 }
View Code

 

以上是关于codeforces148D的主要内容,如果未能解决你的问题,请参考以下文章

codeforces148D

CodeForces 148D Bag of mice

「Codeforces 148D」Bag of mice

Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题

Codeforces 148D Bag of mice:概率dp 记忆化搜索

[Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)][C. Playing Piano](代码片段