您的位置:首页 > 其它

bzoj4318 OSU!(期望概率DP,期望的线性性)

2017-09-18 10:36 274 查看

bzoj4318 OSU!

原题地址http://www.lydsy.com/JudgeOnline/problem.php?id=4318

题意:

一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串。在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释)

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

数据范围

N<=100000

题解:

期望的线性性:

期望的和=和的期望

期望的平方≠平方的期望

期望的立方≠立方的期望

(可以理解成概率会乘多次)

因为

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

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

每次如果成功,对答案贡献3*x^2+3*x+1 (接着之前的x个1)

失败 贡献0

我们每次计算期望长度和期望的 长度的平方,并且都要从前一位线性去推。

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=100005;
int n;
double f
,f2
,sum
;
int main()
{
scanf("%d",&n);
for(int i=0;i<=n;i++) f[i]=f2[i]=sum[i]=0.0;
double ans;
for(int i=1;i<=n;i++)
{
double p;
scanf("%lf",&p);
f[i]=(f[i-1]+1)*p;
f2[i]=(f2[i-1]+2*f[i-1]+1)*p;
sum[i]=sum[i-1]+(3*f2[i-1]+3*f[i-1]+1)*p;
}
printf("%0.1lf\n",sum
);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: