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 }
以上是关于codeforces148D的主要内容,如果未能解决你的问题,请参考以下文章
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](代码片段