luogu P1654 OSU! 概率dp
阿新 • • 發佈:2018-11-02
基礎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