题目链接:https://vjudge.net/problem/TopCoder-9915

(论文上的题)

题解:

更正:, i>0, j>0

代码如下:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
using namespace std;
typedef long long LL;
const double EPS = 1e-;
const int INF = 2e9;
const LL LNF = 9e18;
const int MOD = 1e5;
const int MAXN = 1e3+; // 记忆化搜索
double dp[MAXN][MAXN];
bool vis[MAXN][MAXN];
double dfs(int r, int b)
{
if(r==) return ; //当没有红牌剩余时,停止翻牌,则期望为0
if(b==) return r; //当没有黑牌剩余时,将剩余的红牌全部翻完,则期望为r
/* if(r<=b) return 0;
本来认为如果红小于黑时,就停止翻牌,期望为0.但是当r<=b时,期望仍有可能大于0,
因为允许在任意时刻停止翻牌,即在前景对自己不利的时候停止。
比如1 1,EX = 0.5*1 + 0.5*(-1+1.0*1) = 0.5。 第一部分:当翻完红牌时,
前景,即期望是对自己不利的,因而马上停止。
*/
if(vis[r][b]) return dp[r][b];
vis[r][b] = true;
return dp[r][b] = max(0.0, 1.0*r/(r+b)*(dfs(r-,b)+) + 1.0*b/(r+b)*(dfs(r,b-)-));
} int main()
{
int R, B;
while(scanf("%d%d", &R, &B)!=EOF)
{
memset(vis, false, sizeof(vis));
printf("%.3lf\n", dfs(R,B));
}
} /* 递推
double dp[MAXN][MAXN];
int main()
{
int R, B;
while(scanf("%d%d", &R, &B)!=EOF)
{
for(int i = 0; i<=B; i++) //当没有红牌剩余时,停止翻牌,即期望为0
dp[0][i] = 0;
for(int i = 1; i<=R; i++)
{
dp[i][0] = i;
for(int j = 1; j<=B; j++) //如果剩余的期望小于0,就不再翻牌了。
dp[i][j] = max(0.0, 1.0*i/(i+j)*(dp[i-1][j]+1) + 1.0*j/(i+j)*(dp[i][j-1]-1));
}
printf("%.3lf\n", dfs(R,B));
}
}
*/ /* 滚动数组
double dp[MAXN];
int main()
{
int R, B;
while(scanf("%d%d", &R, &B)!=EOF)
{
for(int i = 0; i<=B; i++)
dp[i] = 0;
for(int i = 1; i<=R; i++)
{
dp[0] = i;
for(int j = 1; j<=B; j++)
dp[j] = max(0.0, 1.0*i/(i+j)*(dp[j]+1) + 1.0*j/(i+j)*(dp[j-1]-1));
}
printf("%.3lf\n", dp[B]);
}
}
*/ /*
int R, B;
double dp[MAXN][MAXN]; //另一种dp[i][j]的定义:当前翻了i张红,j张黑,剩余的期望为多少。
bool vis[MAXN][MAXN];
double dfs(int r, int b)
{
if(r==R) return 0;
if(b==B) return R-r;
if(vis[r][b]) return dp[r][b];
vis[r][b] = true;
return dp[r][b] = max(0.0, 1.0*(R-r)/(R+B-r-b)*(dfs(r+1,b)+1) + 1.0*(B-b)/(R+B-r-b)*(dfs(r,b+1)-1));
} int main()
{
while(scanf("%d%d", &R, &B)!=EOF)
{
memset(vis, false, sizeof(vis));
printf("%.3lf\n", dfs(0,0));
}
}
*/

TopCoder SRM420 Div1 RedIsGood —— 期望的更多相关文章

  1. TopCoder SRM420 Div1 500pt RedIsGood

    桌面上有R 张红牌和B 张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1 美元,黑牌则付出1 美元.可以随时停止翻牌,在最优策略下平均能得到多少钱. R,B ≤ 100000. 输 ...

  2. TopCoder 649 div1 & div2

    最近一场TC,做得是在是烂,不过最后challenge阶段用一个随机数据cha了一个明显错误的代码,最后免于暴跌rating,还涨了一点.TC题目质量还是很高的,非常锻炼思维,拓展做题的视野,老老实实 ...

  3. TopCoder SRM500 Div1 250 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-250.html SRM500 Div1 250 题意 (看题用了半个小时--) 有 n 个人(编号 ...

  4. topcoder SRM642 div1 hard WheelofFortune

    题目链接:vjudge 大意:有两个人参加一场游戏,这个游戏在一个编号为\(0\text~n-1\)的轮盘上进行,一开始轮盘上的数字均为0:一共有\(m\)轮,每一轮都有一个操作参数\(s_i\),主 ...

  5. TopCoder SRM500 Div1 500 分治

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-500.html SRM500 Div1 500 没想到 double 的精度居然没有爆-- 考虑以 ...

  6. TopCoder SRM500 Div1 1000 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-1000.html SRM500 Div1 1000 设 \(v_1,v_2,\cdots ,v_9 ...

  7. TopCoder SRM502 Div1 500 贪心 01背包

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html SRM502 Div1 500 好题. 首先,如果已经确定了解决所有问题的优先级, ...

  8. TopCoder SRM502 Div1 1000 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-1000.html SRM502 Div1 1000 题意 从 [0,n-1] 中选择 k 个不同的 ...

  9. topcoder SRM712 Div1 LR

    题目: Problem Statement      We have a cyclic array A of length n. For each valid i, element i-1 the l ...

随机推荐

  1. Tomcat Manager用户名和密码

    在浏览器输入http://localhost:8080/,打开Tomcat自带的默认主页面,右侧有“administration”“documentation”等模块.选择“administratio ...

  2. Skia构建系统与编译脚本分析

    分析下Skia的构建系统,详细编译过程參看Windows下从源代码编译Skia.这里以ninja为例来分析.运行以下三条命令就能够完毕编译: SET "GYP_GENERATORS=ninj ...

  3. java sqlite配置和自定义函数

    资源 jetty Jetty Downloads地址 sqlite sqlite JDBC Driver 地址:bitbucket代码托管 和 Github代码托管 jetty配置sqlite 在je ...

  4. 显存不够----ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[4096]

    ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[4096] 类似问题 h ...

  5. js 显示当前系统时间

    <div id="test"></div>                <script >                    setInt ...

  6. python学习(十一)函数、作用域、参数

    定义和调用函数 在这里函数的定义和调用和一般的语句没什么不一样,感觉函数也是对象 #!/usr/bin/python def times(x, y):                # 定义函数    ...

  7. C++常用强制类型转换

    1.static_cast 最常用的类型转换符,在正常状况下的类型转换,如把int转换成float,如: int i; float f; f=(float)i; 或者 f=static_cast(i) ...

  8. PHP和mysql的长连接

    关于 PHP MySQL 长连接.连接池的一些探索 PHP连接MySQL的方式,用的多的是mysql扩展.mysqli扩展.pdo_mysql扩展,是官方提供的.php的运行机制是页面执行完会释放所有 ...

  9. JDK设置Encoding编码格式

    执行JAVA程序报错内容如下: java.lang.IllegalStateException: The Java Virtual Machine has not been configured to ...

  10. 06 php 单例模式

    一:单例模式的三大原则 (1)构造函数需要标记为非public(防止外部使用new操作符创建对象),单例类不能在其他类中实例化,只能被自身实例化. (2)拥有一个保存类的实例的静态成员变量$_inst ...