题意

长为n的01串,每个字符为1的概率为Ai,否则为0。每个全1极长为x的贡献为x3。问期望贡献。

思路

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

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

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