[BZOJ4318] OSU!

期望DP。

发现第i次的期望分数和第i-1次的连击次数有关。

设第i次连击次数是g[i]

因为是三次方,f[i]=f[i-1]+(g[i-1]*3+g[i-1]*g[i-1]*3+1)×p[i]

因为(x+1)3展开就是大概这个样子。

但是期望不可以直接乘。

所以我们维护一个次数的平方和次数即可。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=100005;
int n;
double p[N],f[N],g[N],h[N];
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) {
        scanf("%lf",&p[i]);
        g[i]=(g[i-1]+1)*p[i];
        h[i]=(h[i-1]+g[i-1]*2+1)*p[i];
        f[i]=f[i-1]+(3*g[i-1]+3*h[i-1]+1)*p[i];
    }
    printf("%.1lf",f[n]);
    return 0;
}
OSU!

 

posted @ 2018-10-16 17:36  SWHsz  阅读(91)  评论(0编辑  收藏  举报