CF235B Let's Play Osu!
不会概率期望的线性性质怎么办?想不出题解中的神奇dp怎么办?
就用普通的概率dp做法即可,无脑推式子。
我们令
虽然长得恶心,但不难理解。j就是来枚举“失败”的位置(可以是0),所以要乘上
之后怎么办?那个完全平方让人难以下手。所以把它拆了,同时将i项提到前面去。
虽然还是恶心,但我们令:
(此时有
可以发现,ABC都可以递推出来。
边际条件?可以看出
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define F(i,a,b) for(int i=a;i<=b;++i)
const int maxn=1e5+5;
int n;
double p[maxn],d[maxn];
int main()
{
scanf("%d",&n);
F(i,1,n) scanf("%lf",&p[i]);
double a=0,b=0;
F(i,1,n)
{
a=p[i]*a+(d[i-1]+(double)i*i)*(1-p[i]);
b=p[i]*b+i*(1-p[i]);
d[i]=a-2*b*i+(double)i*i;
}
printf("%.9lf",d[n]);
return 0;
}
(思维难度并不高)