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