题目大意:
一个序列,每个位置有p的概率是1,否则是0。
序列中一段连续1的个数为x,则贡献为x^3,且这连续的一段1不能被其余的一段1所包含。
题解:
考虑每一位是1对答案的贡献。
x^3--->(x+1)^3
发现贡献和x^2的期望和x的期望有关。dp求出。
这一位如果是0,则没有贡献。
这题应该可以扩展到x^k,复杂度为O(n*k^2)
并没有验证过是否可以dp 组合数,再通过组合数求x^k。
代码:
#include<cstdio>
using namespace std;
double a[100005],f[100005][3];
int main(){
int n;
scanf("%d",&n);
for (int i=1; i<=n; i++)
scanf("%lf",&a[i]);
double ans=0;
for (int i=1; i<=n; i++){
f[i][1]=(f[i-1][1]+1)*a[i];
f[i][2]=(f[i-1][2]+2*f[i-1][1]+1)*a[i];
ans+=(3*f[i-1][2]+3*f[i-1][1]+1)*a[i];
}
printf("%.1f
",ans);
return 0;
}