码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces148D

时间:2018-11-14 01:00:51      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:return   接下来   code   ORC   print   状态   1.0   open   个人   

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\n",dp[w][b]);
16     return 0;
17 }
View Code

 

codeforces148D

标签:return   接下来   code   ORC   print   状态   1.0   open   个人   

原文地址:https://www.cnblogs.com/pandaking/p/9955691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!