[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 }