4318: OSU! 概率与期望DP

因为 (x+1)3x3=3x3+3x+1,(x+1)2x2=2x+1
所以维护一个 3 次方的期望可以通过维护一个 2 次方的期望和一个 1 次方的期望,而维护一个 2 次方的期望可以通过维护一个 1 次方的期望。分别维护就好了。
期望的平方不等于平方的期望!

#include<iostream>
#include<cstdio>
using namespace std;
int n;
double x,l[100005],l2[100005],f[100005];
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%lf",&x);
        l[i]=(l[i-1]+1)*x;
        l2[i]=(l2[i-1]+2*l[i-1]+1)*x;
        f[i]=f[i-1]+(3*l2[i-1]+3*l[i-1]+1)*x;
    }
    printf("%.1lf\n",f[n]);
    return 0;
}

你可能感兴趣的:(4318: OSU! 概率与期望DP)