两个人 A, B 取 n 枚石子,祂们轮流抛硬币 (A 先手),每次抛硬币,如果是正面,就取出一枚石子,否则什么都不做,然而 A, B 有一种超能力,在抛硬币前在意志中确定一面 (正面或反面),然后就有 pA 或 pB 的概率抛出意志中的那一面 (当然,常人的 p = 0.5)。取得最后一枚石子的人获胜。假如 A, B 都采取最佳策略,求 A 获胜的概率,其中 pA, pB ≥ 0.5,n ≤ 108,精度 6 位小数。

  这道题好难啊。。用全概率公式做。

  设$f_i$为剩下i枚石子,A先手,A获胜的概率。$g_i$为剩下i枚石子,B先手,A获胜的概率。显然$f_0=0$,$g_0=1$。

  令事件X表示剩下i枚石子,A先手且获胜。事件Y表示剩下i枚石子,A抛硬币抛到正面。显然硬币只有两面,所以$A$和$\overline{A}$是$\Omega$的完备事件组。

  因为如果抛到正面,那么A获胜的概率就是有i-1枚棋子,B先手,A获胜的概率,所以:$p(X\mid Y)=g_{i-1}$,$p(X\mid Y)=g_i$。那么根据全概率公式$p(X)=p(X\mid Y)p(Y)+p(X\mid \overline Y)p(\overline Y)=p(Y)g_{i-1}+p(\overline Y)g_i$。p(Y)是A抛到正面的概率,也就是要根据A想不想抛到正面来改变。暂时记$p(Y)=P_{A'}$,则$f_i=p(X)=P_{A'}g_{i-1}+(1-P_{A'})g_i$。同理,$g_i=P_{B'}f_{i-1}+(1-P_{B'})f_i$。然后联立方程组(我们要让方程组里不包含下标为i的东西,这是dp的原则),可得:$$f_i=\frac{P_{A'}g_{i-1}+(1-P_{A'})P_{B'}f_{i-1}}{P_{A'}+P_{B'}-P_{A'}P_{B'}}$$
  那么现在来考虑$P_{A'}$和$P_{B'}$。来看$P_{A'}$。明显,如果$g_{i-1}>g_i$,代入一下前面$g_i$的等式,可得如果$f_{i-1}<g_{i-1}$,A想抛正面(算一算,很凑巧),所以$P_{A'}=p(A)$。$f_{i-1}>g_{i-1}$时A想抛反面,所以$P_{A'}=1-p(A)$,同理也可以推出$P_{B'}$的。

 1 #include <cstdio>
 2 using namespace std;
 3
 4 const int maxn=1e6+5;
 5 int t, n;
 6 double f[maxn], g[maxn];
 7 double pa, pb, panow, pbnow, tmp;
 8
 9 int main(){
10     scanf("%d", &t);
11     for (int tt=0; tt<t; ++tt){
12         scanf("%d%lf%lf", &n, &pa, &pb);
13         if (n>1e6) n=1e6;
14         f[0]=0, g[0]=1;
15         for (int i=1; i<=n; ++i){
16             if (f[i-1]!=g[i-1]){
17                 if (f[i-1]<g[i-1])
18                     panow=pa, pbnow=pb;
19                 else panow=1-pa, pbnow=1-pb;
20                 tmp=panow+pbnow-panow*pbnow;
21                 f[i]=(panow*g[i-1]+(1-panow)*pbnow*f[i-1])/tmp;
22                 g[i]=(pbnow*f[i-1]+(1-pbnow)*panow*g[i-1])/tmp;
23             } else f[i]=g[i]=f[i-1]=g[i-1];
24         }
25         printf("%0.6lf\n", f[n]);
26     }
27     return 0;
28 }

转载于:https://www.cnblogs.com/MyNameIsPc/p/7593711.html

game with probability problem相关推荐

  1. 在 MIT 教了大半辈子书,他学会 10 件事

    文章目录 Lesson One Lesson Two Lesson Three Lesson Four Lesson Five Lesson Six Lesson Seven Lesson Eight ...

  2. mysql 命令执行drop 命令_(笔记)Mysql命令drop table:删除数据表

    drop table命令用于删除数据表. drop table命令格式:drop table ; 例如,删除表名为 MyClass 的表: mysql> drop table MyClass; ...

  3. 用贝叶斯定理解决三门问题并用Python进行模拟(Bayes' Rule Monty Hall Problem Simulation Python)...

    三门问题(Monty Hall problem)也称为蒙提霍尔问题或蒙提霍尔悖论,出自美国的电视游戏节目<Let's Make a Deal>.问题名字来自该节目的主持人蒙提·霍尔(Mon ...

  4. Codeforces Round #594 (Div. 2) C. Ivan the Fool and the Probability Theory 思维 + dp

    文章目录 题意: 思路 题意: 思路 一开始找规律,表都打好了,没找出来.. 找规律还是适合让队友来. 先考虑第一行,我们先计算第一行的方案数,设f[i][j]f[i][j]f[i][j]表示到了ii ...

  5. UVALive 6909 Kevin's Problem 数学排列组合

    Kevin's Problem 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid ...

  6. codeforces#253 D - Andrey and Problem里的数学知识

    这道题是这种,给主人公一堆事件的成功概率,他仅仅想恰好成功一件. 于是,问题来了,他要选择哪些事件去做,才干使他的想法实现的概率最大. 我的第一个想法是枚举,枚举的话我想到用dfs,但是认为太麻烦. ...

  7. RL(Chapter 4): Gambler’s Problem

    本文为强化学习笔记,主要参考以下内容: Reinforcement Learning: An Introduction 代码全部来自 GitHub 习题答案参考 Github 目录 Gambler's ...

  8. 2.2 DP: Value Iteration Gambler‘s Problem

    目录 Value Iteration Background Definition Pesudo code Gambler's Problem Case Case analysis Code Resul ...

  9. 高等概率论 Chapter 6 Construction of a Probability Measure

    Chapter 6 Construction of a Probability Measure 南京审计大学统计学研究生第一学期课程,<高等概率论>. 欢迎大家来我的github下载源码呀 ...

最新文章

  1. Net5 已经来临,让我来送你一个成功
  2. 括号配对问题(C++栈)
  3. 工作131:根据请求返回报错
  4. Mybatis(1)---入门篇单表查询
  5. Python练习:快乐的数字
  6. Python进阶(十三) os、random、time等标准库
  7. asp.net中使用水晶报表 ---pull
  8. Android之使用自定义华为扫描SDK扫描二维码和识别本地图片
  9. 用友NC单据模板公式
  10. 罗马数字转换python_罗马数字转整数 python
  11. Android:Canvas: trying to draw too large
  12. 微信小程序有哪些优点和价值
  13. FSK过零检测技术软件实现
  14. 计算机英语期末考试方案,【计算机英语论文】计算机实训考核方法改革方案(共4649字)...
  15. 软件工程和计算机科学排名,计算机科学与技术与软件工程专业排名(15页)-原创力文档...
  16. SEEK学习论坛-JavaWeb开发实训课题 (数据库MySQL+js+Ajax+Servlet)
  17. C语言(宏,内存,地址,指针,解引用)
  18. 递归--谢宾斯基三角形、赛尔平斯基地毯
  19. Angular2.x-显示heroes列表
  20. 【Windows自带的端口转发netsh interface portproxy,本机转发虚拟机】

热门文章

  1. php 数组 闭包,PHP如何用array_filter加闭包函数过滤数组?
  2. 基于深度学习模型的麻蕉疾病自动识别(增加形态计量和几何分析)
  3. pytorch制作test和train下面还有类别的文件(从一个图片文件中复制)
  4. Socket的通信是基于连接的通信,通信结束时,Socket将不再有用,关闭时为了节约宝贵的系统资源
  5. navtab触底 小程序_微信小程序TAB切换效果
  6. java map扩容机制_java中ConcurrentHashMap的扩容机制问题
  7. java 封装dll_java调用C#封装的DLL文件
  8. 系统设计(一)——Overview
  9. mysql参数优化步骤_MySQL架构优化实战系列4:SQL优化步骤与常用管理命令2(转)
  10. vscode php 不进断点,php – Docker和XDebug没有读取断点VSCode