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. 深信服SCSA

    最近应公司要求报了SCSA课程,老师讲解的可谓是非常的专业以及详细,不止深信服产品及其配置,还有VPN,网络基础的原理介绍等等,产品不用说,工作中会遇到,能学即学.最好的要数网络发包原理,建立连接等底 ...

  2. Python中numpy模块的简单使用

    # encoding:utf-8 import numpy as np data1 = np.array([1, 2, 3, 4, 5]) print(data1) data2 = np.array( ...

  3. Opencv之像素值的获取

    灰度图像${\rm{M}} \times {\rm{N}}$的像素矩阵值为0~255,像素值越大越亮.${{\rm{I}}_{{\rm{i}}{\rm{j}}}}$,i表示行的位置,j 表示列的位置即 ...

  4. mysql逻辑备份与还原工具mysqldump

    (一)mysqldump介绍 mysqldump是MySQL自带的逻辑备份工具,类似于Oracle的expdp/impdp,mysqldump备份十分灵活,可以在以下级别对数据库进行备份: 实例下的所 ...

  5. RabbitMQ使用注意事项

    用ConnectionFactory创建的TCP连接要复用,因为创建新的TCP连接比较耗时. IModel(信道)是轻量级的,可以用时创建. channel.BasicQos(0, 1, false) ...

  6. pandas模块详解

    Pandas模块 1.什么是pandas pandas是基于numpy构建的,用来做数据分析的 2.pandas能干什么 具备对其功能的数据结构DataFrame,Series 集成时间序列功能 提供 ...

  7. wcf编程资料

    如下为WCF编辑资料 链接:https://pan.baidu.com/s/1kZnc6eNOfEggHSfJNXj8Ag 提取码:gj7s 复制这段内容后打开百度网盘手机App,操作更方便哦 第01 ...

  8. oracle dataguard配置

    1.archivelog设置:(存档模式) 2.standy controlfile 设置: alter database create standby controlfile as '/data/o ...

  9. pytorch save model + Gmatch4py + jupyter debugger + community structure

    1. pytorch, 使用训练好的模型测试自己图片 2. [ pytorch ] ——基本使用:(2) 训练好的模型参数的保存以及调用 3. Gmatch4py 4. Network Analysi ...

  10. [CF]Round511

    这场比赛我及时的参加了,但是打的时候状态实在是太烂了,只做出来了Div2的AB题. A Little C loves 3 I 直接构造就行. B Cover Points 应该很容易就看出来这个等腰三 ...