BZOJ4318:OSU!

题意:一共有n次操作,每次操作只有成功与失败之分,

成功对应1,失败对应0,n次操作对应为1个长度为n的01串。

在这个串中连续的 X个1可以贡献x^3 的分数 现在给出n,

以及每次操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。

期望的立方不等于立方的期望

设f[i]表示期望得分(三次的期望)

设g[i]表示二次的期望

设h[i]表示1的长度期望(一次的期望)

根据  $x^3=(x-1)^3+3*x^2+3*x+1$

    $x^2=(x-1)^2+2*x+1$

    $x=x-1+1$

得到f,g,h的递推公式(别忘了乘概率)

#include<cstdio>
#include<iostream>
using namespace std;
#define dou 0
#define DB double
#define mod 100500
int n;
DB f[mod];
DB g[mod];
DB a[mod];
DB h[mod];
signed main()
{   
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lf",&a[i]);
        h[i]=(h[i-1]+1)*a[i];
        g[i]=(g[i-1]+2.0*h[i-1]+1)*a[i];
        f[i]=f[i-1]+(3.0*g[i-1]+3.0*h[i-1]+1)*a[i];
    }
    printf("%.1lf",f[n]);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/olinr/p/9417232.html