lightoj 1408 概率dp
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 &= (1-p)*g[1]+1\\B&=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] &= p*f[i+1]+A\\g[i]&=(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] &= 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*\frac{1-p^{x-1}}{1-p}\\&=A*\frac{1-p^{x-1}}{1-p}\\&=(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&= [1-(1-p)^{y-1}]\\D&=\frac{1-(1-p)^{y-1}}{p}\\E&=(1-p^{x-1})\\F&=\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]&=C*f[1]+D\\f[1]&=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的更多相关文章
- A Dangerous Maze (II) LightOJ - 1395(概率dp)
A Dangerous Maze (II) LightOJ - 1395(概率dp) 这题是Light Oj 1027的加强版,1027那道是无记忆的. 题意: 有n扇门,每次你可以选择其中一扇.xi ...
- Where to Run LightOJ - 1287(概率dp)
Where to Run LightOJ - 1287(概率dp) 题面长长的,看了半天也没看懂题意 不清楚的地方,如何判断一个点是否是EJ 按照我的理解 在一个EJ点处,要么原地停留五分钟接着走,要 ...
- LightOJ - 1151概率dp+高斯消元
概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...
- LightOJ 1038 概率dp
题意:给一个数n,每次除它的一个因子(等概率),问除到1的次数的期望是多少 题解:概率dp,对于一个数x,y是x的因子个数,因子是a1到ay,E(x)=(E(a1)+1)/y+...+(E(ay)+1 ...
- lightoj 1030 概率dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1030 #include<cstdio> #include<cstri ...
- LightOJ - 1079 概率dp
题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值 题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],d ...
- Lights inside 3D Grid LightOJ - 1284 (概率dp + 推导)
Lights inside 3D Grid LightOJ - 1284 题意: 在一个三维的空间,每个点都有一盏灯,开始全是关的, 现在每次随机选两个点,把两个点之间的全部点,开关都按一遍:问k次过 ...
- Snakes and Ladders LightOJ - 1151( 概率dp+高斯消元)
Snakes and Ladders LightOJ - 1151 题意: 有100个格子,从1开始走,每次抛骰子走1~6,若抛出的点数导致走出了100以外,则重新抛一次.有n个格子会单向传送到其他格 ...
- Batting Practice LightOJ - 1408
Batting Practice LightOJ - 1408(概率dp) 题意:有无限个球,进球的概率为p,问你连续不进k1个球或者连续进k2个球需要使用的球的个数的期望 思路: \(定义f[i]表 ...
随机推荐
- The Number of Inversions(逆序数)
For a given sequence A={a0,a1,...an−1}A={a0,a1,...an−1}, the number of pairs (i,j)(i,j) where ai> ...
- 项目部署到tomcat,验证部署成功
1.假设你已经知道打war包放上去了tomcat 下的webapps下 2. bin->启动startup.bat 3.浏览器中启动 http://ip:port 这个port是tomca ...
- vue配置开发,测试,生产环境api
npm run build 调用开发环境接口,打包开发环境npm run build:test 调用测试环境接口,打包测试环境npm run build:prod 调用生产环境接口,打包生产环境 vu ...
- [ZJOI2007] 矩阵游戏 - 二分图匹配
题意:问一个\(0-1\)方阵是不是非奇异的 其实我真的很想求行列式 #include <bits/stdc++.h> using namespace std; #define N 505 ...
- gogs迁移至gitlab
一.先来聊一聊迁移的思路,不管是gogs迁移至gitlab,还是gitlab迁移至gogs,亦或gitlab迁移至gitlab,手动迁移的步骤都是如下图所示(在gitlab上新建一个空项目就会有这样的 ...
- django实现简易登录注册
经过一些文档的理解,以及一些时间的琢磨.我觉得可以用django做一些小项目了 先说说登录功能吧. 先创建一个app,用admin命令 在cmd打开到manage.py同级目录下,django-adm ...
- HDU 1542 Atlantis(扫描线算法)
题意:给出n个矩形的左下角左边和右上角坐标,求这n个矩形的面积并 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542 典型的扫描线算法的题目 什么是 ...
- wamp 增加mongodb拓展 安装
安装环境: windows 7 64bit php 5.5.12 确认环境参数: 1.在phpinfo() 中查看compiler 2.在phpinfo() 中查看thread safety,线程是否 ...
- ADO.NET中sqlserver和mysql的变量名
因为ADO.NET标配是访问SQL SERVER数据库,那么如果需要访问MySQL数据库,那么ADO.NET五个对象也必须转换. 访问 SQL SERVER 的ADO.NET对象 1.SqlConne ...
- TNS-12545: Connect failed because target host or object does not exist
问题描述 $ lsnrctl startLSNRCTL for Linux: Version 12.1.0.2.0 - Production on 26-JUL-2017 09:53:42Copyri ...