luogu P1654 OSU! 概率dp
Posted yuyanjiab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
",f[n]);
23 }
以上是关于luogu P1654 OSU! 概率dp的主要内容,如果未能解决你的问题,请参考以下文章