Codeforces - Bag of mice

题目链接:Codeforces - Bag of mice


状态很好想,就是dp[i][j]表示,当前i只白,j只黑,先手获胜的概率。

怎么转移呢?

如果先手直接抓白,概率为:i/(i+j)
如果先手黑,后手白。因为算获胜概率,所以不管。
如果先手黑,后手黑,跑黑:
如果先手黑,后手黑,跑白:

只有这几种可能,直接转移即可。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e3+10;
double dp[N][N];	int w,b;
signed main(){
	cin>>w>>b;
	for(int i=1;i<=w;i++)	dp[i][0]=1.0,dp[i][1]=i*1.0/(i+1);
	for(int i=1;i<=w;i++){
		for(int j=2;j<=b;j++){
			dp[i][j]=1.0*i/(i+j);
			dp[i][j]+=1.0*j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2)*dp[i-1][j-2];
			if(j>=2)
				dp[i][j]+=1.0*j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3];
		}
	}
	printf("%.10lf\n",dp[w][b]);
	return 0;
}
发布了553 篇原创文章 · 获赞 242 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/104216305
今日推荐