Codeforces Round #105 (Div. 2) D 概率DP_html/css_WEB-ITnose

php中文网
发布: 2016-06-24 11:54:01
原创
1387人浏览过

题目

呃 琢磨了半天还是琢磨出来了,题意有些模糊哈,有w个白色物品,b个黑色物品,A,B轮着抽,A先开始,谁先抽到白色谁赢,若最终都没有抽到白色 则算B赢,抽出来的物品不会放回去,B抽完以后 物品还会有一个额外产生丢失,问A赢的概率为多少

依旧是以目标状态为边界,当前状态到目标状态所需要的概率为 方程

dp[i][j] 代表当前轮到A抽的时候,还有i个白色的j个黑色的A赢的概率为多少

则当前转移可能有四种

立即学习前端免费学习笔记(深入)”;

1:A抽到了白色的,那么直接赢了,接下来不需要继续,所以没有与其它状态方程有联系

2:A抽到了黑色的,下一次B抽到了白色的 那么A输了,输了就结束了 对下面我们要求的答案无影响,所以不管这一个

3:A抽到了黑色,下一次B又抽到了黑色,且丢失的为白色的,也就是dp[i - 1][j - 2],因为这个都没有产生绝对赢输的状态,所以会对下面的方程转移递推有帮助,所以需要联系上

4:A抽到了黑色,下一次B抽到了黑色,且丢失的为黑色,也就是dp[i][j - 3],这个也没有产生绝对的输赢,所以还是需要联系上


全屏形式概念表单
全屏形式概念表单

全屏形式概念表单

全屏形式概念表单 37
查看详情 全屏形式概念表单

那么边界dp[0][0] = 0,因为轮到A的时候没有可以抽的了,表示都抽光了,这时候按照题目条件算B赢的

还有dp[i][0]轮到A抽的时候 黑色的已经没有了,那么A只能抽白色的  所以肯定赢咯

还有dp[0][j]轮到A的时候白色的没有了,所以必输


double dp[1000 + 55][1000 + 55];int w,b;void init() {	memset(dp,0.00,sizeof(dp));}bool input() {	while(cin>>w>>b) {		return false;	}	return true;}void cal() {	dp[0][0] = 0.00;	for(int i=1;i<=w;i++)dp[i][0] = 1.00;	for(int j=1;j<=b;j++)dp[0][j] = 0.00;	for(int i=1;i<=w;i++) {		for(int j=1;j<=b;j++) {			dp[i][j] = (i * 1.0)/(i + j)*1.0;			if(j >= 2) dp[i][j] += dp[i - 1][j - 2] * (j * 1.0)/(i + j) * (j - 1) * 1.0/(i + j - 1) * (i * 1.0)/(i + j - 2);			if(j >= 3) dp[i][j] += dp[i][j - 3] * (j * 1.0)/(i + j) * (j - 1)*1.0/(i + j - 1) * (j - 2) * 1.0/(i + j - 2);		}	}	printf("%.10lf\n",dp[w][b]);}void output() {}int main() {	while(true) {		init();		if(input())return 0;		cal();		output();	}	return 0;}
登录后复制




HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号