bzoj 4318 OSU 概率期望dp
可以发现:f[i]转移到f[i+1]只和最后一串1的长度和平方有关,
因为如果新加的位置是1,贡献就是(x+1)^3-x^3=3x^2+3x+1,否则为0;所以对于每一个位置,处理出期望的f,x和x^2(x表示最后一串1的长度)即可
#include<cstdio>
#define N 100100
int n;
double a1[N],a2[N],f[N],p[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lf",&p[i]);
for(int i=1;i<=n;i++){
a1[i]=(a1[i-1]+1)*p[i];
a2[i]=(a2[i-1]+2*a1[i-1]+1)*p[i];
f[i]=f[i-1]+(3*a2[i-1]+3*a1[i-1]+1)*p[i];
}
printf("%.1lf\n",f[n]);
}
人生如梦亦如幻 朝如晨露暮如霞。