2018.08.31 bzoj1419 Red is good(期望dp)
描述
桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付 出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。
输入
一行输入两个数R,B,其值在0到5000之间
输出
在最优策略下平均能得到多少钱。
样例输入
5 1
样例输出
4.166666
提示
输出答案时,小数点后第六位后的全部去掉,不要四舍五入.
标签
bzoj1419
期望简单题。
令f[i][j]" role="presentation" style="position: relative;">f[i][j]f[i][j]表示还剩了i张红牌和j张黑牌时最优期望得到钱数。
那么发现:
f[i][j]=(f[i−1][j]+1)∗i/(i+j)+(f[i][j−1]+1)∗j/(i+j)" role="presentation" style="position: relative;">f[i][j]=(f[i−1][j]+1)∗i/(i+j)+(f[i][j−1]+1)∗j/(i+j)f[i][j]=(f[i−1][j]+1)∗i/(i+j)+(f[i][j−1]+1)∗j/(i+j)
但是题目并不允许我们开二维数组。
然而这个状态转移方程只与上一层有关。
因此需要滚动数组优化空间。
我们用f[tmp^1][j]记录上一层状态,f[tmp][i]记录当前层状态。
则有:
f[tmp][j]=(f[tmp" role="presentation" style="position: relative;">f[tmp][j]=(f[tmpf[tmp][j]=(f[tmp^1][j]+1)∗i/(i+j)+(f[i][j−1]+1)∗j/(i+j)" role="presentation" style="position: relative;">][j]+1)∗i/(i+j)+(f[i][j−1]+1)∗j/(i+j)][j]+1)∗i/(i+j)+(f[i][j−1]+1)∗j/(i+j)。
还有就是注意答案的处理。
代码:
#include<bits/stdc++.h>
#define N 5005
using namespace std;
int r,b,tmp;
double f[2][N];
int main(){
cin>>r>>b,tmp=1;
for(int i=1;i<=r;++i){
f[tmp][0]=i;
for(int j=1;j<=b;++j)f[tmp][j]=max(0.0,1.0*i/(i+j)*(f[tmp^1][j]+1)+1.0*j/(i+j)*(f[tmp][j-1]-1));
tmp^=1;
}
printf("%0.6lf",floor(f[tmp^1][b]*1e6)*1.0/1e6);
return 0;
}
2018.08.31 bzoj1419 Red is good(期望dp)的更多相关文章
- 2018.08.31 bzoj1426 收集邮票(期望dp)
描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且 买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以 ...
- 【BZOJ1419】 Red is good [期望DP]
Red is good Time Limit: 10 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 桌面上有R张红牌和B张 ...
- 2018.09.27 codeforces1045D. Interstellar battle(期望dp)
传送门 一道有意思的期望dp. 题意是给出一棵树,每个点最开始都有一个gg的概率,有m次修改,每次修改会把某个点gg的概率更换掉,让你求出每次修改之后整个树被分成的连通块的数量的期望(gg掉的点不算) ...
- 2018.09.09 UVa10529 - Dumb Bones(期望dp)
传送门 期望dp好题. f[i]表示摆放i个的最小花费,于是f[i]可以从f[j]与f[i-j+1]转移过来了. 代码: #include<bits/stdc++.h> #define N ...
- 2018.09.01 hdu4405 Aeroplane chess (期望dp)
传送门 期望dp简单题啊. 不过感觉题意不太对. 手过了一遍样例发现如果有捷径必须走. 这样的话就简单了啊. 设f[i]" role="presentation" sty ...
- 【BZOJ1419】Red is good 期望DP
题目大意 桌面上有\(R\)张红牌和\(B\)张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到\(1\)美元,黑牌则付出\(1\)美元.可以随时停止翻牌,在最优策略下平均能得到多少钱 ...
- 2018.08.31 19:41 自学go语言
有的人是从最基础的开始学,而我却是从最简单开始学,学着调试,学着编程,其实我也是编程小白,好多的不懂,我不明白很多都可以用云完成了,为什么还要继续自己编程,不明白,但是有需求吧,有需求是件好事情,说明 ...
- 2018.08.31 16:26 调试 Swift 和 Pycharm 与 github 之间的链接
花了一段时间调试Swift和Pycharm的链接,网上查了一下有关信息,再加上自己的摸索,一会就掌握了.
- 2018.08.31 bzoj3566: [SHOI2014]概率充电器(概率dp+容斥原理)
传送门 概率dp好题啊. 用f[i]" role="presentation" style="position: relative;">f[i] ...
随机推荐
- [PHP]用户登陆中间件
Laravel 4中,可以使用Route::filter,而在Laravel 5中,没有了filter.php文件,官方建议使用中间件做. 下面是用户登陆的测试例子,涉及到的一些方法和使用,先参见这里 ...
- 解决org.springframework.context.NoSuchMessageException: No message found under code 'login.validate.er
转自:https://blog.csdn.net/steveguoshao/article/details/36184971 在项目中遇到 org.springframework.context.No ...
- JS时间格式和时间戳的互转
//时间格式转为时间戳 function sjc(){ var date = new Date(); //时间对象 var str = date.getTime(); //转换成时间戳 } //时间戳 ...
- jquery formValidator 表单验证插件, ajax无法传值到后台问题的解决
今天使用jquery formValidator-4.0.1 这个插件做表单验证, 前台验证已写好, 准备写ajax验证, 结果无法把值传到后台 .ajaxValidator({ url : & ...
- socket 网络连接基础
socket 客户端 import socket 1.client = socket.socket() # socket.TCP/IP 选择连接的类型,默认为本地连接 2.client.connec ...
- Redis主从复制原理
前言: 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构, ...
- js实现UTC时间转为北京时间,时间戳转为时间
用了阿里云的接口,发现其穿的日期是UTC格式的.需要转换. var utc_datetime = "2017-03-31T08:02:06Z"; function utc2beij ...
- centos多版本python安装pip
http://www.cnblogs.com/longxiang92/p/5829373.html yum install python-pip 报错 no package python-pip av ...
- HttpSession的关键属性和方法
1.当一个用户向服务器发送第一个请求时,服务器为其建立一个session,并为此session创建一个标识号:2.这个用户随后的所有请求都应包括这个标识号.服务器会校对这个标识号以判断请求属于哪个se ...
- 一文看懂Stacking!(含Python代码)
一文看懂Stacking!(含Python代码) https://mp.weixin.qq.com/s/faQNTGgBZdZyyZscdhjwUQ