概率DP RED IS GOOD
来源:互联网 发布:金投顾软件怎么样 编辑:程序博客网 时间:2024/04/30 13:21
问题 J: Red is good
时间限制: 1 Sec 内存限制: 64 MB
提交: 15 解决: 7
题目描述
桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。
输入
一行输入两个数R,B,其值在0到5000之间
输出
在最优策略下平均能得到多少钱。
样例输入
5 1
样例输出
4.166666
提示
输出答案时,小数点后第六位后的全部去掉,不要四舍五入.
状态转移挺有意思的,f[i][j]表示牌堆初始有i张红牌,j张黑牌,那么转移:如果第一次抽到红牌,那么概率为i/(i+j),抽完这张红牌后还剩下i-1张红牌,j张黑牌,那不就是f[i-1][j]了么。第一次抽到黑牌以此类推。
f[i][0]=i;
f[i][j]=max(0,(f[i-1][j]+1)*i/(i+j)+(f[i][j-1]-1)*j/(i+j));
不四舍五入还是挺简单的,用int卡一下即可。
#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;double f[3][5005];int n,m;int main(){ cin>>n>>m; for(int i=0;i<=n;i++) { int k=i%2;f[k][0]=i; for(int j=1;j<=m;j++) f[k][j]=max(0.0,(f[k][j-1]-1.0)*(double)j/(i+j)+(f[k^1][j]+1.0)*(double)i/(i+j)); } int ans=f[n%2][m]*1000000; printf("%.6lf",(double)ans/1000000);}
阅读全文
1 0
- 概率DP RED IS GOOD
- Red is good (DP)
- 1419: Red is good 概率与期望 DP
- [BZOJ1419]Red is good(概率期望dp)
- bzoj 1419 Red is good 概率dp求期望
- 【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 题解
- java反射和动态代理
- 第九篇:UDP协议
- iOS App 启动性能优化
- 从数据库导出xml文件
- Mysql Tips
- 概率DP RED IS GOOD
- 【转载】Unity C# 调用C++ dll 问题集锦
- 每天积累一点(一三)--JVM之GC算法
- SSM发送Email
- [PAT]1081 Rational Sum (20)
- 分组函数嵌套
- pe下如何安装uefi gpt win7系统呢?
- 死锁及其预防
- 第十篇:TCP协议简介