[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; }
我是咸鱼。转载博客请征得博主同意Orz