题目链接:BZOJ - 4318
三次方期望。
一次方期望:x1[i]=(x1[i-1]+1)*p
二次方期望:x2[i]=(x2[i-1]+2*x1[i-1]+1)*p
同时我们知道(x+1)^3-x^3=3*x^2+3*x+1
所以我们知道dp式子为:
dp[i]=dp[i-1]+(x2[i-1]*3+x1[i-1]*3+1)*p
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e5+10;
double dp1[N],dp2[N],dp3[N],p[N]; int n;
signed main(){
cin>>n;
for(int i=1;i<=n;i++) scanf("%lf",&p[i]);
for(int i=1;i<=n;i++){
dp3[i]=dp3[i-1]+(3*dp2[i-1]+3*dp1[i-1]+1)*p[i];
dp2[i]=(dp2[i-1]+2*dp1[i-1]+1)*p[i];
dp1[i]=(dp1[i-1]+1)*p[i];
}
printf("%.1lf\n",dp3[n]);
return 0;
}