【CodeForces148D】Bag of mice
题意
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的更多相关文章
- 【CF148D】 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 kuangbin总结中的第9题 啊……题目给的数据只有白鼠和黑鼠的数量,所以我们只能在这个上面做(gao)文(D)章(P)了…… 明显可以用两种老鼠的数量来作为状态= = 我的WA做法: 令 ...
- 【Codeforces 105D】 Bag of mice
[题目链接] http://codeforces.com/contest/148/problem/D [算法] 概率DP f[w][b]表示还剩w只白老鼠,b只黑老鼠,公主胜利的概率,那么 : 1. ...
- 【codeforces 148D】 Bag of mice
http://codeforces.com/problemset/problem/148/D (题目链接) 题意 包中有w个白鼠,b个黑鼠.公主和龙轮流画老鼠,公主先画,谁先画到白鼠谁就赢.龙每画完一 ...
- 【ros】.bag文件
Bags are typically created by a tool like rosbag They store the serialized message data in a file as ...
- CF 148D Bag of mice【概率DP】
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes Promblem descriptio ...
- 训练技巧详解【含有部分代码】Bag of Tricks for Image Classification with Convolutional Neural Networks
训练技巧详解[含有部分代码]Bag of Tricks for Image Classification with Convolutional Neural Networks 置顶 2018-12-1 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- 【转】java正则表达式
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...
随机推荐
- [LeetCode系列] 二叉树最大深度求解问题(C++递归解法)
问: 给定二叉树, 如何计算二叉树最大深度? 算法描述如下: 如果当前节点为空, 返回0(代表此节点下方最大节点数为0) 如果当前节点不为空, 返回(其左子树和右子树下方最大节点数中的最大值+1) 上 ...
- C#实现 OPC历史数据存取研究
来源:http://blog.csdn.net/gjack/article/details/5641794 C#实现 OPC历史数据存取研究 (原文)Research of Accessing the ...
- 打包python文件,让文件程序化
通过对源文件打包,Python程序可以在没有安装 Python的环境中运行,也可以作为一个独立文件方便传递和管理. 现在网上主流的打包方式有两种py2exe或者pyinstaller两款多平台的Pyt ...
- ElasticSearch读取查询结果(search)
本文转载自:http://blog.csdn.net/wangxiaotongfan/article/details/46531729?locationNum=6 在es中所有的查询结果都会保存在Se ...
- [转] geochart 地图控件官方示例
<html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'>&l ...
- OSPF理论介绍
OSPF协议Open Shortest Path First是链路状态协议.RIP和EIGRP是距离矢量协议只知道邻居,但链路状态可知道全网信息,因此天然免疫环路.距离矢量协议和链路状态协议最大的区别 ...
- django之中间件设置
中间件 是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出 激活:添加到Django配置文件中的MIDDLEWARE_CLASSES元组中 每个中间件 ...
- C# 接口(Interface)
接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 口定义了属性.方法和事件,这些都是接 ...
- Netty心跳之IdleStateHandler
Netty提供了对心跳机制的天然支持,心跳可以检测远程端是否存活,或者活跃 今天我们就一起初识一下Netty4的心跳机制 Netty4.0提供了一个类,名为IdleStateHandler,这个类可以 ...
- FTP服务器(SOCKET)返回异常 500 Command not understood
出现着这样的问题,一般是NLST中的参数包含特殊字符,如"\n",所以在发送SOCKET命令时,一定要检查命令参数的合法性.