luogu P1654 OSU! 概率dp

传送门

基础dp还是想了好久....

维护连续区间长度的期望 还是三次方

考虑一次方非常好维护 问题就是期望长度的和 

记录一下末端1个数的期望就行

有p[i]的概率继承 有(1-p[i]) 的概率中断

那么三次方是一样的

f[],g[],h[]分别维护1,2,3次下的末端期望长度

然后就可以转移

注意h[]同时维护最终答案

Time cost : 35min

Code:

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 using namespace std;
 7 #define N 100005
 8 
 9 int n;
10 double p[N],f[N],g[N],h[N];
11 
12 int main()
13 {
14     scanf("%d",&n);
15     for (int i=1;i<=n;++i) scanf("%lf",&p[i]);
16     for (int i=1;i<=n;++i)
17     {
18         g[i]=p[i]*(g[i-1]+1);
19         h[i]=p[i]*(h[i-1]+2*g[i-1]+1);
20         f[i]=p[i]*(f[i-1]+3*h[i-1]+3*g[i-1]+1)+(1-p[i])*f[i-1];
21     }
22     printf("%.1lf\n",f[n]);
23 }
View Code

 

猜你喜欢

转载自www.cnblogs.com/yuyanjiaB/p/9898417.html