题意

长为\(n\)的01串,每个字符为\(1\)的概率为\(A_i\),否则为\(0\)。每个全1极长为\(x\)的贡献为\(x^3\)。问期望贡献。

思路

不是很复杂,就是要知道\((x+1)^3-x^3\)这种变化量,就需要设关于\(x^2\)\(x\)的状态

期望dp
设状态为\(f1[i]\)表示第\(i\)个为\(1\)的期望长度,\(f2[i]\)表示第\(i\)个为\(1\)的期望长度的平方,\(f3[i]\)表示前\(i\)个的答案。
\(f1[i]=(f1[i-1]+1)*A_i\)
\(f2[i]=(f2[i-1]+2*f1[i-1]+1)*A_i\)
\(f3[i]=(f3[i-1]+3*f2[i-1]+3*f1[i-1]+1)*a_i+f3[i-1]*(1-A_i)\)

code:

#include<bits/stdc++.h>
using namespace std;
typedef double db;
const int N=1e5+5;
db f1[N],f2[N],f3[N];
int main() {
	int n;scanf("%d",&n);
	for(int i=1;i<=n;i++) {
		db a;scanf("%lf",&a);
		f1[i]=(f1[i-1]+1)*a;
		f2[i]=(f2[i-1]+2*f1[i-1]+1)*a;
		f3[i]=(f3[i-1]+3*f2[i-1]+3*f1[i-1]+1)*a+(1-a)*f3[i-1];
	}
	printf("%.1lf",f3[n]);
	return 0;
}