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]);
}



posted @ 2017-07-22 14:03  Ren_Ivan  阅读(138)  评论(0编辑  收藏  举报