题意

dragon和princess玩一个游戏。开始的时候袋子里有w个白老鼠和b个黑老鼠。两个人轮流从袋子里面往外摸老鼠。谁先拿到白老鼠谁先获胜。dragon每次抓出一只老鼠,剩下老鼠里面都会有一只跳出袋子。princess则不会。 princess先抓。问princess赢得概率是多少。

分析

简单的概率DP。我一看到两个人玩得这种游戏就习惯性的定义两个dp数组。

f[i][j][0]为当前袋子里有i只白老鼠,j只黑老鼠时,princess赢得概率

f[i][j][1]为当前袋子里有i只白老鼠,j只黑老鼠时,dragon赢得概率

状态的转移也很好想

f[i][j][0]=(1-f[i][j-1][1])*(j/(i+j))+i/(i+j).

f[i][j][1]=(1-f[i-1][j-1][0])*j/(i+j)*i/(i+j-1)+(1-f[i][j-2][0])j/(i+j)(j-1)/(i+j-1)+i/(i+j)

AC代码如下

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream> using namespace std;
const int maxn=+;
int w,b;
double f[maxn][maxn][]; int main(){
scanf("%d%d",&w,&b);
memset(f,,sizeof(f));
f[][][]=;f[][][]=1.0;
for(int i=;i<=w;i++)
f[i][][]=f[i][][]=1.0;
for(int i=;i<=b;i++)
f[][i][]=1.0;
for(int i=;i<=w;i++){
for(int j=;j<=b;j++){
if(j==||i==)
continue;
if(j>=){
f[i][j][]=(-f[i][j-][])*j/(i+j)+(double)i/(i+j);
if(i>=)
f[i][j][]=(-f[i-][j-][])*(j*i)/((i+j)*(i+j-))+(double)i/(i+j);
}
if(j>=)
f[i][j][]+=(-f[i][j-][])*(j*(j-))/((i+j)*(i+j-));
}
}
printf("%.9f",f[w][b][]); return ;
}

然后我看网上大佬们一般一个数组就解决了。

令f[i][j]为当前有i个白老鼠,j个黑老鼠时,princess先手,赢得概率。

那么状态转移有几种可能性:

1.princess直接拿到了白老鼠,赢得了游戏,概率为i/(i+j)

2.princess拿到了黑老鼠,dragon拿到了黑老鼠,跳出来黑老鼠,概率为j/(i+j) *  (j-1)/(i+j-1) *  (j-2)/(i+j-2)

3.princess拿到了黑老鼠,dragon拿到了黑老鼠,跳出来一只白老鼠,概率为j/(i+j) *  (j-1)/(i+j-1) *  i/(i+j-2)

AC代码如下

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream> using namespace std;
const int maxn=+;
double f[maxn][maxn];
int w,b;
int main(){
scanf("%d%d",&w,&b);
memset(f,,sizeof(f));
for(int i=;i<=w;i++)
f[i][]=1.0;
for(int i=;i<=b;i++)
f[][i]=0.0;
f[][]=;
for(int i=;i<=w;i++){
for(int j=;j<=b;j++){
f[i][j]+=(double)i/(i+j);
if(j>=){
f[i][j]+=(double)j/(i+j)*(double)(j-)/(i+j-)*(double)(j-)/(i+j-)*f[i][j-];
}
if(j>=){
f[i][j]+=(double)j/(i+j)*(double)(j-)/(i+j-)*(double)i/(i+j-)*f[i-][j-];
}
}
}
printf("%.9f\n",f[w][b]);
return ;
}

【CodeForces148D】Bag of mice的更多相关文章

  1. 【CF148D】 Bag of mice (概率DP)

    D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  2. 【CodeForces】【148D】Bag of mice

    概率DP kuangbin总结中的第9题 啊……题目给的数据只有白鼠和黑鼠的数量,所以我们只能在这个上面做(gao)文(D)章(P)了…… 明显可以用两种老鼠的数量来作为状态= = 我的WA做法: 令 ...

  3. 【Codeforces 105D】 Bag of mice

    [题目链接] http://codeforces.com/contest/148/problem/D [算法] 概率DP f[w][b]表示还剩w只白老鼠,b只黑老鼠,公主胜利的概率,那么 : 1. ...

  4. 【codeforces 148D】 Bag of mice

    http://codeforces.com/problemset/problem/148/D (题目链接) 题意 包中有w个白鼠,b个黑鼠.公主和龙轮流画老鼠,公主先画,谁先画到白鼠谁就赢.龙每画完一 ...

  5. 【ros】.bag文件

    Bags are typically created by a tool like rosbag They store the serialized message data in a file as ...

  6. CF 148D Bag of mice【概率DP】

    D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes Promblem descriptio ...

  7. 训练技巧详解【含有部分代码】Bag of Tricks for Image Classification with Convolutional Neural Networks

    训练技巧详解[含有部分代码]Bag of Tricks for Image Classification with Convolutional Neural Networks 置顶 2018-12-1 ...

  8. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  9. 【转】java正则表达式

    在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...

随机推荐

  1. spec.template.spec.initContainers[1].securityContext.privileged: Forbidden: disallowed by policy 问题解决

    主要是执行系统特权应用解决方法: api server   controller-manager 加上  --allow-privileged=true 即可 之后重启服务  

  2. php用smtp方式发送邮件

    http://www.daixiaorui.com/read/16.html 2个比较经典的PHP加密解密函数分享 http://www.jb51.net/article/51706.htm php5 ...

  3. 笔记:webpack 打包参数 mode development

    webpack 打包参数 mode development 在开发时使用 webpack 打包后不压缩,所以只需要在 webpack 打包命令中加上 --mode mode development 即 ...

  4. JavaFX 之窗口拖动(三)

    一.问题场景 在上一篇中,我们将窗口的默认标题栏隐藏从而导致鼠标点击窗体无法进行拖动. 二.解决思路 给组件添加鼠标按下事件监听器和鼠标拖动事件监听器. 三.代码实现 /** * 程序入口 * @au ...

  5. app.js:1274 [Vue warn]: Error in render: "TypeError: Cannot read property 'object_id' of undefined"问题小记

    凌晨遇到一个控制台报错的信息,总是显示有对象中的元素未定义 明明是有把定义对象的值的,后面发现是把没有返回值的函数又赋值一遍给未定义的元素所属的对象,

  6. 黄聪:VS2010中“新建项目”却没有“解决方案”节点,如何调出来

    工具->选项->项目和解决方案 把"总是显示解决方案"打 √ 就ok 了

  7. Hibernate学习4—关联关系一对多映射2

    第四节:班级学生一对多映射实现(双向) 查询班级的时候能够获取所有的学生:   在上一节的基础之上:我们在Class端也保存学生的关系: com.cy.model.Class: public clas ...

  8. appium+python自动化33-解锁九宫格(TouchAction)

    TouchAction 1.源码可以在这个路径找到:Lib\site-packages\appium\webdriver\common\touch_action.py class TouchActio ...

  9. Sentinel限流示例:编码和注解限流

    一.Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentine ...

  10. Condition分析

    Condition中提供了一组类似于Object中的监视器方法.与Lock配合可以完成等待通知模式. Condition只能通过Lock#newCondition()方法获取,所以Condition是 ...