2018.08.30 bzoj4318: OSU!(期望dp)

传送门
简单期望dp。
感觉跟Easy差不多,就是把平方差量进阶成了立方差量,原本维护的是 (x+1)2x2 ( x + 1 ) 2 − x 2 的期望。
现在维护的是 (x+1)3x3 ( x + 1 ) 3 − x 3 => x23+x3+1 x 2 ∗ 3 + x ∗ 3 + 1 的期望。
然而期望的平方并不等于平方的期望。
因此我们要多维护一个从i开始的连续后缀为1的长度平方的期望。
代码:

#include
#define N 100005
using namespace std;
int n;
double p[N],f[N],g[N],h[N];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i)scanf("%lf",&p[i]);
    for(int i=1;i<=n;++i)f[i]=(f[i-1]+1)*p[i],g[i]=(g[i-1]+2*f[i-1]+1)*p[i],h[i]=h[i-1]+(g[i-1]*3+f[i-1]*3+1)*p[i];
    printf("%.1lf",h[n]);
    return 0;
}

你可能感兴趣的:(#,期望dp)