题意

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. 搭建Spring Cloud+Dubbo

    公司要测试一下zipkin是否可以跟踪全流程,项目的架构比较复杂,不要问我为什么,基本架构如下:前端门户,调用spring cloud组件,spring cloud在调用dubbo,这样一套流程.于是 ...

  2. Errors running builder 'DeploymentBuilder' on project ' 解决方法

    此问题一般发生在Myeclipse 保存文件并自动部署时候. Errors occurred during the build. Errors running builder 'DeploymentB ...

  3. dwr的A request has been denied as a potential CSRF attack.错误

    虽然DWR是个很早就出现的Ajax框架,但一直都没去使用过,今天正好没事就看了一下并参照文档照做了个demo, 在其中碰到一个问题: 后台打印出错误信息:“严重: A request has been ...

  4. 使用JDK合成照片

    原图(工程所在目录7098849.jpg): 头像(工程所在目录20181023201750.jpg): 开始合成(执行如下main方法): public static void main(Strin ...

  5. 本地oracle的配置连接

    oraclediver_name=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@205.168.1.125:1521:orclusernam ...

  6. 手动下载阿里云Nexus上的Jar包

    手动下载阿里云Nexus上的Jar包 1.1 在任意目录下创建一个文件夹,创建一个pom.xml文件,一个bat批处理脚本,如图: 1.2 DownLoad.bat文件中的内容: call mvn - ...

  7. 【Leetcode 167】Two Sum II - Input array is sorted

    问题描述:给出一个升序排列好的整数数组,找出2个数,它们的和等于目标数.返回这两个数的下标(从1开始),其中第1个下标比第2个下标小. Input: numbers={2, 7, 11, 15}, t ...

  8. 深入理解jQuery框架-框架结构

    这是本人结合资料视频总结出来的jQuery大体框架结构,如果大家都熟悉了之后,相信你们也会写出看似高档的js框架: jquery框架的总体结构 (function(w, undefined){ //定 ...

  9. SpringMVC之八:基于SpringMVC拦截器和注解实现controller中访问权限控制

    SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...

  10. Thread.setDaemon详解

    Thread.setDaemon详解 线程分为两种类型:用户线程和守护线程.通过Thread.setDaemon(false)设置为用户线程:通过Thread.setDaemon(true)设置为守护 ...