题意

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. nomad 安装(单机)试用

    备注:     nomad  可以实现基础设施的调度管理,类似kubernetes ,但是在多云以及多平台支持上比较好,     还是hashicrop 工具出品的,很不错,同时本地测试因为使用默认的 ...

  2. jasmine 使用

    1. 下载浏览器运行测试包 https://github.com/jasmine/jasmine/releases 2.  解压,运行包含的测试 SpecRunner.html 3. 测试结果     ...

  3. php mysql 字符集(三) (转)

    http://bbs.csdn.net/topics/390097514 gbk页面插入数据到utf8表,然后取出到gbk页面 首先, 这个set names x等价于SET character_se ...

  4. OpenCL入门

    初入OpenCL,做个记录. 在Windows下开发OpenCL程序,必须先下载OpenCL的SDK,现在AMD,NVIDIA,Intel均提供各自的OpenCL库,基本是大同小异.安装好SDK后新建 ...

  5. java 工作流

    BPM是jboss旗下遵守LGPL许可的java开源工作流,功能比较完善,从4.0开始引入了pvm的概念,支持jPDL.BPEL等流程定义语言.由于相关资料还比较少,开发自己的一个demo还不是太容易 ...

  6. 试玩swoole扩展 第一天

    安装 pecl install swoole 部分过程: configure: creating ./config.statusconfig.status: creating config.hrunn ...

  7. 最近项目和java对接,涉及到java的DESede加解密算法

    google后找到这个作者的一篇博客,搬过来用 http://hersface.com/page/17.html <?php class DESede{ /** * 加密 * @param $d ...

  8. ShowDialog窗体的return问题

    最近的一个项目里,打开新窗口用到了ShowDialog()这种方式,发现在新窗口做保存操作的时候,保存按钮事件下的程序执行完(无论有没有return)都会关闭子窗口. 网上查了一下,发现大家说的方法在 ...

  9. Django在Eclipse下配置启动端口号

    首先,在Eclipse左侧树形菜单中找到要更改端口号的项目: 然后,在这里右键选择属性,打开属性界面之后选择Run/Debug Setting,并在其中找到已有的启动项,如果没有可以新建或启动一次. ...

  10. Apache的下载安装(主要说的 64位)及问题

    本文转载自:http://blog.csdn.net/qq_15096707/article/details/47319545 今天重装完win10系统,就重新下载安装 Apache.虽说之前有安装过 ...