codeforces 148D Bag of mice(概率dp)
题意:给你w个白色小鼠和b个黑色小鼠,把他们放到袋子里,princess先取,dragon后取,princess取的时候从剩下的当当中任意取一个,dragon取得时候也是从剩下的时候任取一个,但是取完之后会随机跳出来一个。取到每个小鼠的概率是一样的,跳出的也是一样的。先取到白色的小鼠赢,问最后princess能赢的概率。
思路:概率dp,如果把princess能赢的分成两种情况,那么这个题就是递推了,我是用记忆化搜索写的。首先,用dp[i][j]表示袋子当中还有i个白色的,j个黑色的princess能取赢的概率。那么有两种情况:
1.这一步能取赢,那么就是直接取到白色的,概率为i/(i+j);
2.这一步取不赢,那么当前一定是取到黑色的,因为最后要让princess赢,所以,接着dragon也取不赢,现在还有一个问题是,跳出的小鼠的颜色,那么又分为两种情况:
1). 跳出的为白色的。概率就是j/(i+j)*(j-1)/(i+j-1)*(i)/(i+j-2)*dp[i-1][j-2]
2). 跳出的位黑色的。概率就是j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3]
推到这里基本上就出来了,剩下的边界条件了。如果i==0,那么概率一定是0, 如果i>0&&j==0那么概率一定为1.
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = ;
double dp[maxn][maxn];
double dfs(int i, int j)
{
if (i <= || j < ) return ;
if (i > && j == ) return dp[i][] = ;
if (dp[i][j] != -) return dp[i][j];
double t1 = (double)i / (i + j);
double t2 = (double)j / (i + j);
dp[i][j] = t1;
if (i + j > )
{
double t3 = dfs(i, j - ) * (j - ) / (i + j - ) * (j - ) / (i + j - );
double t4 = dfs(i - , j - ) * (j - ) / (i + j - ) * (i) / (i + j - );
t2 *= (t3 + t4);
dp[i][j] = t1 + t2;
}
return dp[i][j];
}
int main()
{
int w, b;
scanf("%d%d", &w, &b);
//memset(dp, -1, sizeof(dp));
for (int i = ; i <= w; i++)
for (int j = ; j <= b; j++)
dp[i][j] = -;
printf("%.9f\n", dfs(w, b)); return ;
}
codeforces 148D Bag of mice(概率dp)的更多相关文章
- Codeforces 148D Bag of mice 概率dp(水
		
题目链接:http://codeforces.com/problemset/problem/148/D 题意: 原来袋子里有w仅仅白鼠和b仅仅黑鼠 龙和王妃轮流从袋子里抓老鼠. 谁先抓到白色老师谁就赢 ...
 - CF 148D Bag of mice 概率dp 难度:0
		
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
 - codeforce 148D. Bag of mice[概率dp]
		
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
 - 抓老鼠 codeForce 148D - Bag of mice 概率DP
		
设dp[i][j]为有白老鼠i只,黑老鼠j只时轮到公主取时,公主赢的概率. 那么当i = 0 时,为0 当j = 0时,为1 公主可直接取出白老鼠一只赢的概率为i/(i+j) 公主取出了黑老鼠,龙必然 ...
 - Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题
		
除非特别忙,我接下来会尽可能翻译我做的每道CF题的题面! Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题 题面 胡小兔和司公子都认为对方是垃圾. 为了决出谁才是垃 ...
 - Codeforces Round #105 (Div. 2) D. Bag of mice 概率dp
		
题目链接: http://codeforces.com/problemset/problem/148/D D. Bag of mice time limit per test2 secondsmemo ...
 - Bag of mice(概率DP)
		
Bag of mice CodeForces - 148D The dragon and the princess are arguing about what to do on the New Y ...
 - CF 148D. Bag of mice (可能性DP)
		
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
 - Codeforces 148D Bag of mice:概率dp 记忆化搜索
		
题目链接:http://codeforces.com/problemset/problem/148/D 题意: 一个袋子中有w只白老鼠,b只黑老鼠. 公主和龙轮流从袋子里随机抓一只老鼠出来,不放回,公 ...
 
随机推荐
- POJ_3321_APPLE_TREE
			
poj上面的一道求子树上苹果的题目,网上看了很多题解,下面我来回忆一下,基本来源于大神的微博,http://blog.csdn.net/zhang20072844,我来做个搬运工.先将树的n条边上节点 ...
 - 12.URL重写
			
为什么要URL重写?1.有利于SEO(搜索引擎优化),带参数的RUL权重较低.2.地址看起来更正规,推广uid. 如我们一般在访问网页是会带参数,http://aaa.com/view.htm?id= ...
 - JavaScript字符串的操作
			
<script> var s=new String(); var s="Hello World"; alert(s.toLowerCase(s));//转小写 aler ...
 - 【转】Android4.4 之Bluetooth整理
			
原文网址:http://www.cnblogs.com/shed/p/3737016.html Android 4.4上蓝牙协议栈采用的是BRCM和Google共同开发的bluedroid,代替了之前 ...
 - Makefile第三讲:终端传值给Makefile、Makefile传值给C++代码
			
摘要 终端传值给Makefile,咋传?只需在终端输入以下命令,那么就可以在Makefile文件中放心大担的使用$(abcde)这个变量了,它的值为BBB Makefile fun.h #includ ...
 - [转]NHibernate之旅(10):探索父子(一对多)关联查询
			
本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...
 - dos攻击与防御
			
SYN Flood攻击 标准的TCP三次握手过程如下: 客户端发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号: 服 ...
 - uploadify上传图片(限制最多五张)
			
项目中遇到图片上传的情况,好多都是使用服务器上传控件进行上传的,很是不爽. 然后在网上找到了uploadify的方法,自己总结和修改后分享给大家. 项目文档预览: 1.引用原有css和js &l ...
 - 排列的Java递归语言实现
			
在做算法题的时候,发现排列经常被使用到,是一个重要的知识点, 下面是博主修改过的代码,初学者,如有不足,欢迎指出 import java.util.ArrayList; import java.uti ...
 - iOS 视频播放的简单使用
			
最近工作中有用到视频播放的内容,分享一些简单的用法给大家(由于网速问题,本例中使用的是本地的资源进行播放,要播放网络上的修改一些URL即可) 1.iOS9之前的视频播放 首先需要导入MediaPlay ...