[Codeforces148D]Bag of mice(概率dp)
2017-03-13 20:35
218 查看
题目描述
传送门题意:一个袋子里有w只白老鼠和b只黑老鼠,有两个人轮流抓老鼠,每个人每次都等概率地抓出一只老鼠,第二个人抓完之后袋子里会等概率地跳出来一只老鼠,第一个抓到白老鼠的人获胜。问第一个人获胜的概率
题解
令f(i,j)表示袋子里总共用i只老鼠,并且j只为白老鼠的概率根据剩余老鼠的数量可以判断出第几个人抓或者老鼠往外跳
那么当第一个人或者第二个人抓的时候,f(i,j)从f(i+1,j)转移过来(因为一旦有人抓到白老鼠就获胜了,游戏结束)
当老鼠往外蹦的时候,f(i,j)从f(i+1,j)和f(i+1,j+1)转移过来
然后对于每一个第一个人抓的时候计算一下概率就行了
注意特判一下0的情况
代码
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; int w,b,n; double f[2005][2005],ans; int main() { scanf("%d%d",&w,&b);n=w+b; if (!w) { printf("%.10lf\n",ans); return 0; } f [w]=1.0;ans+=f [w]*((w+0.0)/(n+0.0)); for (int i=n-1;i>=0;--i) for (int j=min(w,i);j>=0;--j) { int k=i-j,minus=(n-i)%3; if (minus<=1) f[i][j]=f[i+1][j]*((k+1.0)/(i+1.0)); else f[i][j]=f[i+1][j+1]*((j+1.0)/(i+1.0))+f[i+1][j]*((k+1.0)/(i+1.0)); if (!minus&&i) ans+=f[i][j]*((j+0.0)/(i+0.0)); } printf("%.10lf\n",ans); }
相关文章推荐
- CF148D--Bag of mice+概率期望dp
- Codeforces Round #105 (Div. 2)—Bag of mice 概率期望dp
- 抓老鼠 codeForce 148D - Bag of mice 概率DP
- codeforces 148 D. Bag of mice 概率dp
- codeforces-148D-Bag of mice-概率DP
- 【CF148D】 Bag of mice (概率DP)
- codeforces-148D-Bag of mice-概率DP
- Codeforces 148D - Bag of mice 概率dp
- Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题
- Bag of mice - CodeForces 148 D 概率dp
- 【codeforces148D】Bag of mice(记忆化+概率)
- codeforces--148D--Bag of mice--概率DP
- Codeforces 148D - Bag of mice 概率dp
- 【CF148D】【D. Bag of mice】【概率dp】
- 文章标题 coderforces 148D : Bag of mice (概率DP)
- codeforces 148 D. Bag of mice(概率dp)
- CodeForces 148D-Bag of mice(概率dp)
- CoderForce 148D-Bag of mice (概率DP求概率)
- CodeForces 148D-Bag of mice概率DP
- CF 148D D. Bag of mice (概率DP)