Red is good (DP)
来源:互联网 发布:php 双引号转义 编辑:程序博客网 时间:2024/04/30 08:35
题目
Problem Description
桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。 输出答案时,小数点后第六位后的全部去掉,不要四舍五入.
Input
一行输入两个数R,B,其值在0到5000之间
Output
在最优策略下平均能得到多少钱。
Sample Input
5 1
Sample Output
4.166666
分析
- 题目的意思大概就是给一堆牌,有“+1”有“-1”,确定一种拿法(从上往下拿k张之后停止),对于所有这副牌的排列顺序,使最终这些得分的平均値最大,求出这个最大的平均値。(其实就是求最大的期望值)
- 创建一个数组
E[i][j]
代表有i
个红牌(+1)和j
个黑牌(-1)时所能得到的最大期望值。 - 所以对于
E[i][j]
,我们可以由E[i-1][j]
和E[i][j-1]
推出,相当于是翻一张红牌或翻一张黑牌到达当前状态。乘一下相应的概率就行了。 - 那么就有
E(i,j)=ii+j∗(E(i−1,j)+1)+ji+j∗(E(i,j−1)−1) - 注意,当
E[i][j]
求得小于零时,你当然是希望更大,于是你会将它赋值为0(可以想象宁可保证为0也不想要有可能为负数) - 其实,除了这样倒着推,也可以顺着推,可以自己想一想,下面程序也有(其实差不多)
程序
- 由后面得出当前(倒着推)(被动)
#include <cstdio> double E[5010][5010];int R,B;int main(){ scanf("%d%d",&R,&B); for (int i=0; i<=R; i++) for (int j=0; j<=B; j++){ if (i>0) E[i][j]+=(double)i/(double)(i+j)*(E[i-1][j]+1); if (j>0) E[i][j]+=(double)j/(double)(i+j)*(E[i][j-1]-1); if (E[i][j]<0) E[i][j]=0; } printf("%.6f",E[R][B]-0.0000005);}
- 由当前更新后面(顺着推)(主动)
#include<cstdio> int R,B;double E[5010][5010];int main(){ scanf("%d%d",&R,&B); for (int i=0; i<=R; i++){ for (int j=0; j<=B; j++){ if (E[i][j]<0) E[i][j]=0; E[i+1][j]+=(double)(i+1)/(double)(i+j+1)*(E[i][j]+1); E[i][j+1]+=(double)(j+1)/(double)(i+j+1)*(E[i][j]-1); } } printf("%.6f",E[R][B]-0.0000005);}
注意
- 题目中要求的是第六位之后的数直接去掉,不要求四舍五入,可以用到
ans-0.0000005
这一小技巧。 - 记住一点:
和的期望等于期望的和
0 0
- Red is good (DP)
- 概率DP RED IS GOOD
- 【BZOJ】【P1419】【Red is good】【题解】【DP】
- BZOJ 1419 Red is good 期望DP
- BZOJ 1419: Red is good|期望Dp
- 【bzoj1419】Red is good 期望dp
- bzoj 1419: Red is good 期望dp
- 【BZOJ 1419】Red is good 期望dp
- BZOJ 1419: Red is good 期望DP
- BZOJ 1419: Red is good 期望DP
- [bzoj1419]Red is good 期望DP
- 【BZOJ1419】Red is good 期望DP
- BZOJ1419:Red is good(期望DP)
- bzoj 1419 Red is good 【期望dp】
- 【BZOJ1419】【期望DP】Red is good 题解
- 【期望DP】BZOJ1419[Red is good]题解
- [HbFS-]Red is good
- [HbFS-]Red is good
- js跨域的几种方式:
- BZOJ 1426 收集邮票
- MatLab运行中出现的惊悚现象
- Linux_安全
- Threadlocal
- Red is good (DP)
- RxJava
- 为什么要三次握,要四次分手
- 获取字符串中所有字符组合的子串
- React Native调试技巧
- oracle11g更改字符集AL32UTF8为ZHS16GBK
- 算法导论 最大子数组问题(分治策略)
- [BZOJ4515][Sdoi2016]游戏(树链剖分)
- 机器视觉之 ICP算法和RANSAC算法