https://blog.csdn.net/moon_sky1999/article/details/98097470

博主在此,牛逼神犇

 #include<bits/stdc++.h>
using namespace std;
const double eps = 1e-;
int main(){
int T,k1,k2;
double p;
scanf("%d",&T);
for(int cas=;cas<=T;cas++){
scanf("%lf",&p);
scanf("%d%d",&k1,&k2);
printf("Case %d: ",cas);
if(p<eps) printf("%d\n",k1);
else if(-p<eps) printf("%d\n",k2);
else{
double x1=-pow(-p,k1-);
double x2=-pow(p,k2-);
double y1=x1/p;
double y2=x2/(-p);
double a=(x1*y2+y1)/(-x1*x2);
double b=(y1*x2+y2)/(-x1*x2);
printf("%.7f\n",(-p)*a+p*b+);
}
}
return ;
}

题意:一个人在击球,有p的概率集中,有(1-p)的概率击不中。如果能够连续击中x次将停止,连续不集中y次也将停止。问最终停止击球时击球次数的期望。
思路:设f[i]代表连续击中i次之后距离结束还剩的期望步数。g[i]代表连续不集中i次后距离结束的期望步数。可以列出下列方程:{f[i]=p∗f[i+1]+(1−p)∗g[1]+1g[i]=(1−p)∗g[i+1]+p∗f[1]+1 \left\{\begin{aligned}f[i]=p*f[i+1]+(1-p)*g[1]+1\\g[i]=(1-p)*g[i+1]+p*f[1]+1\end{aligned}\right.{ f[i]=p∗f[i+1]+(1−p)∗g[1]+1g[i]=(1−p)∗g[i+1]+p∗f[1]+1​ 
边界条件:{f[x]=0g[y]=0 \left\{\begin{aligned}f[x]=0\\g[y]=0\end{aligned}\right.{ f[x]=0g[y]=0​ 
答案:ans=p∗f[1]+(1−p)∗g[1] ans = p*f[1]+(1-p)*g[1]ans=p∗f[1]+(1−p)∗g[1]

推导过程:令:{AB=(1−p)∗g[1]+1=p∗f[1]+1 \left\{\begin{aligned}A &amp;= (1-p)*g[1]+1\\B&amp;=p*f[1]+1\end{aligned}\right.{ AB​  =(1−p)∗g[1]+1=p∗f[1]+1​ 
则原式:{f[i]g[i]=p∗f[i+1]+A=(1−p)∗g[i+1]+B \left\{\begin{aligned}f[i] &amp;= p*f[i+1]+A\\g[i]&amp;=(1-p)*g[i+1]+B\end{aligned}\right.{ f[i]g[i]​  =p∗f[i+1]+A=(1−p)∗g[i+1]+B​ 
求解f[1]和g[1]:f[1]=p∗f[2]+A=p∗(p∗f[3]+A)+A=p2∗f[3]+A∗(1+p)=px−1∗f[x]+A∗(1+p+p2+...+px−2)=0+A∗1−px−11−p=A∗1−px−11−p=(1−px−1)∗g[1]+1−px−11−p. \begin{aligned}f[1] &amp;= p*f[2]+A\\ &amp;= p*(p*f[3]+A)+A\\&amp;= p^2*f[3]+A*(1+p)\\&amp;=p^{x-1}*f[x]+A*(1+p+p^2+...+p^{x-2})\\&amp;=0+A*\frac{1-p^{x-1}}{1-p}\\&amp;=A*\frac{1-p^{x-1}}{1-p}\\&amp;=(1-p^{x-1})*g[1]+\frac{1-p^{x-1}}{1-p}\end{aligned}.f[1]​  =p∗f[2]+A=p∗(p∗f[3]+A)+A=p 2 ∗f[3]+A∗(1+p)=p x−1 ∗f[x]+A∗(1+p+p 2 +...+p x−2 )=0+A∗ 1−p1−p x−1 ​ =A∗ 1−p1−p x−1 ​ =(1−p x−1 )∗g[1]+ 1−p1−p x−1 ​ ​ .
同理g[1]=[1−(1−p)y−1]∗f[1]+1−(1−p)y−1p g[1]=[1-(1-p)^{y-1}]*f[1]+\frac{1-(1-p)^{y-1}}{p}g[1]=[1−(1−p) y−1 ]∗f[1]+ p1−(1−p) y−1 ​ 
令⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪CDEF=[1−(1−p)y−1]=1−(1−p)y−1p=(1−px−1)=1−px−11−p \left\{\begin{aligned}C&amp;= [1-(1-p)^{y-1}]\\D&amp;=\frac{1-(1-p)^{y-1}}{p}\\E&amp;=(1-p^{x-1})\\F&amp;=\frac{1-p^{x-1}}{1-p}\end{aligned}\right.⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧​  CDEF​  =[1−(1−p) y−1 ]= p1−(1−p) y−1 ​ =(1−p x−1 )= 1−p1−p x−1 ​ ​ 
则{g[1]f[1]=C∗f[1]+D=E∗g[1]+F \left\{\begin{aligned}g[1]&amp;=C*f[1]+D\\f[1]&amp;=E*g[1]+F\end{aligned}\right.{ g[1]f[1]​  =C∗f[1]+D=E∗g[1]+F​ 
求得f[1]=DE+F1−CE f[1]=\frac{DE+F}{1-CE}f[1]= 1−CEDE+F​ 
g[1]=C∗f[1]+D g[1]=C*f[1]+Dg[1]=C∗f[1]+D
带入ans即可。需要注意p=0或p=1时的情况。代码————————————————版权声明:本文为CSDN博主「Celestine_Jq」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/moon_sky1999/article/details/98097470

lightoj 1408 概率dp的更多相关文章

  1. A Dangerous Maze (II) LightOJ - 1395(概率dp)

    A Dangerous Maze (II) LightOJ - 1395(概率dp) 这题是Light Oj 1027的加强版,1027那道是无记忆的. 题意: 有n扇门,每次你可以选择其中一扇.xi ...

  2. Where to Run LightOJ - 1287(概率dp)

    Where to Run LightOJ - 1287(概率dp) 题面长长的,看了半天也没看懂题意 不清楚的地方,如何判断一个点是否是EJ 按照我的理解 在一个EJ点处,要么原地停留五分钟接着走,要 ...

  3. LightOJ - 1151概率dp+高斯消元

    概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...

  4. LightOJ 1038 概率dp

    题意:给一个数n,每次除它的一个因子(等概率),问除到1的次数的期望是多少 题解:概率dp,对于一个数x,y是x的因子个数,因子是a1到ay,E(x)=(E(a1)+1)/y+...+(E(ay)+1 ...

  5. lightoj 1030 概率dp

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1030 #include<cstdio> #include<cstri ...

  6. LightOJ - 1079 概率dp

    题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值 题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],d ...

  7. Lights inside 3D Grid LightOJ - 1284 (概率dp + 推导)

    Lights inside 3D Grid LightOJ - 1284 题意: 在一个三维的空间,每个点都有一盏灯,开始全是关的, 现在每次随机选两个点,把两个点之间的全部点,开关都按一遍:问k次过 ...

  8. Snakes and Ladders LightOJ - 1151( 概率dp+高斯消元)

    Snakes and Ladders LightOJ - 1151 题意: 有100个格子,从1开始走,每次抛骰子走1~6,若抛出的点数导致走出了100以外,则重新抛一次.有n个格子会单向传送到其他格 ...

  9. Batting Practice LightOJ - 1408

    Batting Practice LightOJ - 1408(概率dp) 题意:有无限个球,进球的概率为p,问你连续不进k1个球或者连续进k2个球需要使用的球的个数的期望 思路: \(定义f[i]表 ...

随机推荐

  1. leetcode top-100-liked-questions刷题总结

    一.起因 宅在家中,不知该做点什么.没有很好的想法,自己一直想提升技能,语言基础自不必言,数据结构还算熟悉,算法能力一般.于是乎,就去刷一通题. 刷题平台有很多,我选择了在leetcode进行刷题.回 ...

  2. 使用ScrollRect制作翻页

    1.标准的层级结构 ScrollRect->ViewPort->Content,Viewport负责显示区域的大小一般和Mask一起配合使用,Content使用Layout来布局,如果想使 ...

  3. 【Unity|C#】基础篇(9)——匿名函数 / Lambda表达式

    [学习资料] <C#图解教程>(第13章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu. ...

  4. api接口出现Provisional headers are shown,

    问题分析:根据反馈可以知道,发起请求,但服务器未及时响应,原因可能是超时,或者被拦截

  5. day02_1hibernate

    对象状态与一级缓存 一.对象缓存状态的介绍: ①在使用hibernate时对象的三种状态:(代码如下) 瞬时状态 :没有与session关联,没有主键OID标识(主键的OID指的是对象id,在配置文件 ...

  6. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.8)-- Reservations

    8.8 Reservations 预订 NVMe的reservation预订功能,用于让两个或多个主机能够协调配合的访问共享namespace.使用这些功能的协议和方式超出了本规格说明书的范围.对这些 ...

  7. nginx的配置总结,有时间自己整理

    推荐文章:https://www.cnblogs.com/digdeep/p/4217310.html  

  8. 松软科技Web课堂:AJAX 简介

    AJAX AJAX 并不是编程语言. AJAX 是一种从网页访问 Web 服务器的技术. AJAX 代表异步 JavaScript 和 XML. AJAX 实例解释 HTML 页面 <!DOCT ...

  9. kali linux2019.4安装启动后中文乱码

    1.鼠标右键找到黑框框打开终端 2.终端执行后重启,乱码解决. sudo apt-get install ttf-wqy-zenhei

  10. Educational Codeforces Round 76 (Rated for Div. 2) C. Dominated Subarray

    Let's call an array tt dominated by value vv in the next situation. At first, array tt should have a ...