题目链接: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. 2017.2.21 activiti实战--第十三章--流量数据查询与跟踪(一)查询接口介绍及运行时数据查询

    学习资料:<Activiti实战> 第十三章 流量数据查询与跟踪 本章讲解运行时与历史数据的查询方法.主要包含三种:标准查询,Native查询,CustomSql查询. 13.1 Quer ...

  2. SourceTree的基本使用-git on mac

    SourceTree的基本使用 学习了:https://www.cnblogs.com/tian-xie/p/6264104.html

  3. UNP学习笔记(第三章:套接字编程简介)

    本章开始讲解套接字API. 套接字地址结构 IPv4套接字地址结构 它以sockaddr_in命名,下面给出它的POSIX定义 struct in_addr { in_addr_t s_addr; } ...

  4. IE对CSS样式的数量和大小的限制

    项目中遇到的问题,css写的样式无法渲染,各种百度后发现大概是这个原因: IE对CSS样式的数量和大小的限制 文档中只有前31个link或style标记关联的CSS能够应用. 从第32个开始,其标记关 ...

  5. vim 查找与替换

    一.vim 查找 1. 正向查找 / 与 反向查找 ? 2. 退出查找 <Esc> 3. 跳转到下一处匹配 n ,跳转到上一处匹配 N 4. /<CR> 正向跳转到相同模式的下 ...

  6. vs2010+qt4编译出现error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject等错误

    1.当vs2010编译qt时会出现以下错误: 1>------ 已启动全部重新生成: 项目: MyDialog, 配置: Debug Win32 ------            1>生 ...

  7. linux使用crontab实现PHP执行定时任务(转)

    前几天写过一篇文章,利用单纯的php实现定时执行任务,但是效率不佳,对于linux来说用crontab实现更加合理. 首先说说cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 c ...

  8. 【BLE】CC2541之自己定义按键

    本篇博文最后改动时间:2017年01月06日,11:06. 一.简单介绍 本文以SimpleBLEPeripheral为例.介绍怎样将普通IO口(P12)自己定义为按键. 注:本文加入按键方法不与协议 ...

  9. c# .net 关于接口实现方式:隐式实现/显式实现!

    以前在用到接口时,从来没注意到接口分为隐式实现与显示实现.昨天在浏览博客时看到相关内容,现在根据自己的理解记录一下,方便日后碰到的时候温习温习.  通俗的来讲,“显示接口实现”就是使用接口名称作为方法 ...

  10. p2p webrtc服务器搭建系列1: 房间,信令,coturn打洞服务器

    中继(relay) 在RTCPeeConnection中,使用ICE框架来保证RTCPeerConnection能实现NAT穿越 ICE,全名叫交互式连接建立(Interactive Connecti ...