lightoj 1408 概率dp

Posted pangbi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lightoj 1408 概率dp相关的知识,希望对你有一定的参考价值。

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

 博主在此,牛逼神犇

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const double eps = 1e-9;
 4 int main(){
 5     int T,k1,k2;
 6     double p;
 7     scanf("%d",&T);
 8     for(int cas=1;cas<=T;cas++){
 9         scanf("%lf",&p);
10         scanf("%d%d",&k1,&k2);
11         printf("Case %d: ",cas);
12         if(p<eps) printf("%d
",k1);
13         else if(1-p<eps) printf("%d
",k2);
14         else{
15             double x1=1-pow(1-p,k1-1);
16             double x2=1-pow(p,k2-1);
17             double y1=x1/p;
18             double y2=x2/(1-p);
19             double a=(x1*y2+y1)/(1-x1*x2);
20             double b=(y1*x2+y2)/(1-x1*x2);
21             printf("%.7f
",(1-p)*a+p*b+1);
22         }
23     }
24     return 0;
25 }

 

题意:一个人在击球,有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{egin{aligned}f[i]=p*f[i+1]+(1-p)*g[1]+1\g[i]=(1-p)*g[i+1]+p*f[1]+1end{aligned} ight.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{egin{aligned}f[x]=0\g[y]=0end{aligned} ight.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{egin{aligned}A &amp;= (1-p)*g[1]+1\B&amp;=p*f[1]+1end{aligned} ight.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{egin{aligned}f[i] &amp;= p*f[i+1]+A\g[i]&amp;=(1-p)*g[i+1]+Bend{aligned} ight.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. egin{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{egin{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} ight.????????????????????  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{egin{aligned}g[1]&amp;=C*f[1]+D\f[1]&amp;=E*g[1]+Fend{aligned} ight.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的主要内容,如果未能解决你的问题,请参考以下文章

lightoj1038_概率dp

LightOJ - 1079 概率dp

LightOJ - 1030 概率dp

LightOJ - 1151概率dp+高斯消元

LightOJ1030 Discovering Gold(概率DP)

概率 dp lightoj 1395