HDU-#1204 糖果大战(Markov过程+概率论)
来源:互联网 发布:java treeset 排序 编辑:程序博客网 时间:2024/04/27 20:09
题目大意:给出两个人手上的糖果数以及玩游戏的胜的概率,问Speakless赢走全部糖果的概率为多少?
解题思路:该题是一个概率论的问题,学过随机过程的知道这是一个马尔可夫过程,即其条件概率仅仅与系统的当前状态相关,与它的过去或者将来的形态无关。具体的讲解和分析可以查阅下马尔科夫的相关知识。而本题与马尔可夫过程中一个经典例子非常类似,就是赌徒输光问题。问题的描述和该题的性质大同小异,就不再赘述了,与本题相关的就是他的概率方程。分析本题可知:首先对特殊条件进行判断,若m=0,则Gardon糖果数为0,那么Speakless胜。反之,若n=0或者Speakless胜的概率为0或Gardon胜的概率为1,则Speakless都会输。然后除去特殊情况,看一般情况下,由两者概率可知:Gardon胜的概率为q*(1-p),Speakless胜的概率为p*(1-q)。如果两者的胜率相等时,即p==q,则Speakless胜的概率为n/(n+m)。若不相等时,运用赌徒输光的概率可知:Speakless胜的概率为(1-r^n)/(1-r^(n+m))。马尔可夫过程参见马儿可夫过程,赌徒输光问题赌徒输光。解法详见code。
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1204
code:
#include <iostream>#include <cstdio>#include <cmath>using namespace std;const double INF = 1e-12;int n,m;double p,q,ans,r;int main(){ while(scanf("%d%d%lf%lf",&n,&m,&p,&q)!=EOF){ if(m==0) printf("1.00\n");//若m=0,则Speakless胜 else if(n==0 || p==0 || q==1) printf("0.00\n"); //若n=0或者Speakless胜的概率为0或Gardon胜的概率为1,则Speakless都会输 else{ r=q*(1-p)/(p*(1-q));//Gardon胜的概率为q*(1-p),Speakless胜的概率为p*(1-q) if(fabs(r-1.0)<INF) ans=n*1.0/(n+m);//胜率相等时,即p==q,概率为n/(n+m) else ans=(1-pow(r,n))/(1-pow(r,(n+m)));//不相等,则Speakless胜的概率为(1-r^n)/(1-r^(n+m)) printf("%.2lf\n",ans); } } return 0;}
0 0
- HDU-#1204 糖果大战(Markov过程+概率论)
- hdu 1204 糖果大战 概率(Markov过程)
- hdu 1204 糖果大战(概率问题 markov 过程)
- 糖果大战(Markov过程)
- HDU-1204-糖果大战(听说用到Markov process!)
- hdu 1204 糖果大战 (Markov Chains求期望)
- HDU 1204 糖果大战 (概率论,递推公式)
- 期望值Markov过程(马尔科夫过程),hdu1204糖果大战
- hdu_1204 糖果大战 (概率论)
- HDU1204 糖果大战(概率论)
- hdu 1204 糖果大战 概率
- HDU 1204 糖果大战【概率】
- 1204 糖果大战
- 糖果大战 - HDU 1204 非公式递推版本
- hdu 1204 吃糖果
- hdu1204.糖果大战
- hdu1204 Markov随机过程
- Markov过程(马尔科夫过程)
- 听鬼哥说虐心的2048简化过程
- 单元格排序+行颜色变化(DHTML)
- 关于区间最小覆盖的问题总结(以zoj 3197 Google Book 为例)
- xml报错-Multiple annotations found at this line
- MySql 一边读一边写
- HDU-#1204 糖果大战(Markov过程+概率论)
- 7.8函数 2
- Codeforces Round #112 (Div. 2) C. Another Problem on Strings
- MySQL-python操作数据库
- codeforces B. Marathon
- 2014-部分知名公司的计算机面试题
- Java基础-synchronized关键字的用法
- LeetCode 3Sum Closest
- C/C++学习笔记:基础知识6