[bzoj4318]OSU![概率dp]

和上一道题一模一样,但是这次是三次方,这样每次对答案的贡献中含有二次项,求期望是线性运算,不能直接平方,平方的期望不等于期望的平方。对于这个平方也要递推计算。

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 double    p[110000],g1[110000],g2[110000],f[110000];
 6 
 7 int main()
 8 {
 9     int    i,n;
10 
11     scanf("%d",&n);
12     for(i=1;i<=n;++i)scanf("%lf",&p[i]);
13     
14     for(i=1;i<=n;++i)
15     {
16         g1[i]=(g1[i-1]+1)*p[i];
17         g2[i]=(g2[i-1]+2*g1[i-1]+1)*p[i];
18         f[i]=f[i-1]+(3*g2[i-1]+3*g1[i-1]+1)*p[i];
19     }
20     printf("%.1f",f[n]);
21     return 0;
22 }

 

posted @ 2015-12-31 02:43  Gster  阅读(824)  评论(0编辑  收藏  举报