题目描述
题解
g(i)表示以i结尾的极长1的期望长度,h(i)表示以i结尾的极长1的长度的平方的期望,f(i)表示以i结尾的期望得分
然后
x2+2x+1−>(x+1)2
,
x3+3x2+3x+1=>(x+1)3
dp就行了
特别注意这题平方的期望不等于期望的平方
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define N 100005
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)
{
g[i]=p[i]*(g[i-1]+1);
h[i]=p[i]*(h[i-1]+2*g[i-1]+1);
f[i]=p[i]*(f[i-1]+3*h[i-1]+3*g[i-1]+1)+(1-p[i])*f[i-1];
}
printf("%.1lf\n",f[n]);
}