HDU-1204-糖果大战
题目描述
生日\(Party\)结束的那天晚上,剩下了一些糖果,\(Gandon\)想把所有的都统统拿走,\(Speakless\)于是说:“可以是可以,不过我们来玩\(24\)点,你不是已经拿到了一些糖果了吗?这样,如果谁赢一局,就拿走对方一颗糖,直到拿完对方所有的糖为止。”如果谁能算出来而对方算不出来,谁就赢,但是如果双方都能算出或者都不能,就算平局,不会有任何糖果的得失。
\(Speakless\)是个喜欢提前想问题的人,既然他发起了这场糖果大战,就自然很想赢啦(不然可就要精光了-_-)。现在他需要你的帮忙,给你他每局赢的概率和\(Gardon\)每局赢的概率,请你给出他可能获得这场大战胜利的概率。
Input
每行有四个数,\(Speakless\)手上的糖果数\(N\),\(Gardon\)手上的糖果数\(M(0<=N,M<=50)\)、一局\(Speakless\)能解答出来的概率\(p\)、一个问题\(Gardon\)能解答出来的概率\(q(0<=p,q<=1)\)。
Output
每行一个数,表示\(Speakless\)能赢的概率(用百分比计算,保留到小数点后2位)。
Sample Input
50 50 0.5 0.5
10 10 0.51 0.5
50 50 0.51 0.5
Sample Output
0.50
0.60
0.88
赤裸裸的数学题!!!
\(dp[i]\)表示\(S\)有\(i\)颗糖时,获胜的概率。
由题意得\(p*(1-q)\)为\(S\)每局获胜的概率
\(q*(1-p)\)为\(S\)每局失败的概率
\(1-p*(1-q)-q*(1-p)\)为平局的概率。
\(\therefore dp[i]=p*(1-q)*dp[i+1]+q*(i-p)*dp[i-1]+(1-p(*1-q)-q*(1-p))*dp[i]\)
移项得
\(\because dp[i]=p*(1-q)*dp[i+1]+q*(i-p)*dp[i-1]+(1-p(*1-q)-q*(1-p))*dp[i]\)
\(\therefore dp[i]+p*(1-q)*dp[i]+q*(1-p)*dp[i]=p*(1-q)*dp[i+1]+q*(i-p)*dp[i-1]+dp[i];\)
\(\therefore p*(1-q)*dp[i]+q*(1-p)*dp[i]=p*(1-q)*dp[i+1]+q*(i-p)*dp[i-1];\)
\(\therefore q*(1-p)*dp[i]-q*(1-p)*dp[i-1]=p*(1-q)*dp[i+1]-p*(1-q)*dp[i];\)
\(\therefore q*(1-p)*(dp[i]-dp[i-1])=p*(1-q)*(dp[i+1]-dp[i])\)
设\(g[i]=dp[i]-dp[i-1]\);
\(\because q*(1-p)*(dp[i]-dp[i-1])=p*(1-q)*(dp[i+1]-dp[i])\)
\(\therefore p*(1-q) g[i]=q*(1-p)*g[i-1];\)
\(\therefore g[i+1]/g[i]=q*(1-p)/(p*(1-q));\)
\(\therefore\) g[i]为等比数列.
设公比\(k=q*(1-p)/(p*(1-q))\);
若\(p==q\);
则\(dp[n]=n/n+m\);
若 \(p!=q\);
相加得
\(dp[0]\)表示失败,\(dp[n+m]\)表示获胜
\(\sum^{n+m}_{i=1}g[i]=dp[n+m]-dp[0]\)
\(\therefore \sum^{n+m}_{i=1}g[i]=1\)
\(g[1]+g[1]*k+g[1]*k^2+...+g[1]*k^{n+m-1}=1;\)
\(\therefore g[1]*(1+k+k^2+...+k^{n+m-1})=1;\)
\(s= 1+k+k^2+...+k^{n+m-1};\)
\(s=(k^{n+m}-1)/(k-1);\)
\(g[1]=1/s;\)
\(\therefore dp[n]-dp[0]=\sum^{n}_{i=1} g[i]=g[1]*(1+k...k^{n-1})=g[1]*(k^n-1)/(k-1);\)
\(\therefore dp[n]=(k^n-1)/((k-1)*s)=(k^n-1)/((k-1)*(((k^{n+m}-1)/(k-1))))=(k^n-1)/(k^{n+m}-1);\)
\(\therefore dp[n]=(k^n-1)/(k^{n+m}-1);\)
代码如下
#include<bits/stdc++.h>
using namespace std;
double p1,p2;
int A,B;
int main(){
ios::sync_with_stdio(false);
while(cin>>A>>B>>p1>>p2){
double k=p2*(1-p1)/(p1*(1-p2));
if(!B||p1==1)puts("1.00");
else if(!A||p2==1)puts("0.00");
else printf("%.2lf\n",(fabs(p1-p2)<1e-6?A*1.0/(A+B)*1.0:(pow(k,A)-1)/(pow(k,A+B)-1)));
}
}
HDU-1204-糖果大战的更多相关文章
- 【HDOJ】1204 糖果大战
题目本身不难.类似于dp.f(i)表示手中现有i颗糖果赢的概率,则下一局赢的概率是p(1-q),下一局输的概率是q(1-p),下一句平手的概率是1-p(1-q)-q(1-p),平手包括两人均答对或答错 ...
- 糖果大战 hdu1204
糖果大战 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu_1024_糖果大战_201404021640
糖果大战 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1204 基础DP 非连续字段的最大和
其实这个感觉是一眼题,只不过我真心太菜了. 题目已经告诉你了,有m段,n个数字,那么我们就只需要dp[m][n]即可,然后最后的答案肯定是dp[m][]的那一行,所以其他行都是没有用的,因为我们可以把 ...
- HDU 1205 吃糖果(想想题)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=1205 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果, ...
- HDU 1205 吃糖果 (鸽巢原理)
题目链接:HDU 1205 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢 ...
- hdu 1205 吃糖果
思路: 仔细想想,想要不重复吃一种糖果, 把所有糖果吃完,只要所有糖果的和,减去最多的糖果+1>=最多糖果的数量即可不重复吃完. #include <stdio.h> int mai ...
- HDU 5353 Average 糖果分配(模拟,图)
题意:有n个人坐在圆桌上,每个人带着糖果若干,每次只能给旁边的人1科糖果,而且坐相邻的两个人最多只能给一次(要么你给我,要么我给你),问是否能将糖果平均分了. 思路: 明显每个人最多只能多于平均值2个 ...
- HDU 1034(传递糖果 模拟)
题意是一群孩子围成一个圈,每个人把手中的糖果分一半给右边的人,若分过之后手中的糖果数是奇数,则由老师提供一颗糖果给他,问这样传递多少圈所有人的糖果数都能相等,最终每人手里的糖果数是多少. 由于题中已经 ...
随机推荐
- Eclipse中文件结构的树形显示问题
问题描述:在Eclipse中的SpringBoot文件显示层级消失. 这种情况下编辑代码的效率大大下降. 原因:Eclipse的工作模式不正确.上面的工作模式是Java模式.实际上应采用JavaEE模 ...
- 洛谷 P2473 [SCOI2008]奖励关 ( 期望DP )
题目链接 题意 : 中文题.点链接 分析 : 第一道有关概率期望的DP 有个大部分情况下通用的结论 概率正推.期望反推 原因不明.其实是没有查到较好的解释 这题由于有一些取物品的先决条件在这里 而且观 ...
- 【UOJ #46】 【清华集训2014】玄学
题目描述 巨酱有 n 副耳机,他把它们摆成了一列,并且由 1 到n依次编号.每个耳机有一个玄学值,反映了各自的一些不可名状的独特性能.玄学值都是 0 到 m-1 间的整数.在外界的作用下(包括但不限于 ...
- 17.Python print()函数高级用法
前面使用 print() 函数时,都只输出了一个变量,但实际上 print() 函数完全可以同时输出多个变量,而且它具有更多丰富的功能. print() 函数的详细语法格式如下: print (val ...
- Centos6.6 安装Mysql集群
一.环境准备 1.1系统IP设置 准备三台服务器安装Centos6.6 64位操作系统,IP地址及角色分配如下: Node IP Address ...
- H5 video全屏与取消全屏兼容
H5 video全屏与取消全屏各浏览器兼容, requestFullscreen()全屏方法,exitFullscreen()退出全屏方法.兼容各个浏览器与css3兼容一样加个前缀即可. // 全屏 ...
- cursor url 自定义鼠标样式
cursor可以自定义鼠标,写法是cursor:url(“图片路径”),pointer; url:需使用的自定义光标的 URL.图片类型需要是.cur或.ani和jpg,png等格式的(.cur或.a ...
- 官网Windows 10安装程序驱动下载--截止:2019.01.06版本
说明:鉴于win7,8不可直接再下载原装iOS文件,这份共享程序包是为以后N年做的准备.如果N年后这个包还可以用,就可以省去很多麻烦. 百度网盘分享:https://pan.baidu.com/s/1 ...
- [CSP-S模拟测试]:Cover(单调栈++单调队列+DP)
题目传送门(内部题126) 输入格式 第一行两个个整数$n,m$表示区间的长度与彩灯的数量. 接下来$m$行,每行三个整数$l_i,r_i,a_i$表示一条彩灯能够覆盖的区间以及它的美观程度. 输出格 ...
- 在oracle数据库里创建自增ID字段的步骤
CREATE TABLE ADVICE ( ID INT NOT NULL, ACTIVE NOT NULL, TYPE INT NOT NULL, MSG ) NOT NULL, ADVICE ) ...