bzoj 4318 OSU 概率期望dp

来源:互联网 发布:知乎学生会主席 编辑:程序博客网 时间:2024/05/16 14:57

可以发现: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 100100int 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]);}