题目:
题意:
袋子里有w只白鼠和b只黑鼠, 龙和公主轮流从袋子里抓老鼠。谁先抓到白色老师谁就赢. 公主每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来.每次抓老鼠和跑出来的老鼠都是随机的。如果两个人都没有抓到白色老鼠则龙赢。公主先抓.问公主赢的概率。
题解:
其实就是个模拟,运用记忆化比较简单
代码:
#include <cstdio>
using namespace std;
bool vis[1005][1005];
double dp[1005][1005];
double dfs(int w,int b)
{
if (w<=0) return 0;
if (b<=0) return 1;
if (vis[w][b]) return dp[w][b];
vis[w][b]=1;
dp[w][b]=w*1.0/(w+b);
if (b>=2)
{
double hh=b*1.0/(w+b)*(b-1)*1.0/(w+b-1);
dp[w][b]+=hh*(w*1.0/(w+b-2)*dfs(w-1,b-2)+(b-2)*1.0/(w+b-2)*dfs(w,b-3));
}
return dp[w][b];
}
int main()
{
int w,b;
scanf("%d%d",&w,&b);
printf("%.9lf",dfs(w,b));
}