2017.8.11 OSU 失败总结

这个题就是告诉你   要用期望来解决期望

   这个题最直接的做法就是n^2dp了,但显然是炸的

  如果要求  (1到n  +1) 的    和  , 那就是n的枚举,但如果有平均数,就直接 n*个数  了

 

  对于二次方,



对于三次方:



不仅是平均数和每个数是这个关系

期望和每种可能的取值也是这个关系

期望仅仅比平均数多了一个概率,所有可能概率加起来还是1、


所以对于1~i种可能的1串长度,我们可以求一个期望长度,来代替这i种可能的长度(由于对所有长度的操作都一样(都是乘当前点的概率),所以可以用一个期望来代替操作)


因为每插入一个1,对前面的所有1~i长度的1串都要乘概率

所以它就可以递推了    

如果这个点是1      那   上一个的期望长度就要加1    概率为   这个点的概率

如果这个点是0      那    上一个点的期望长度就全变成0    ,这种情况就终止了,不会对答案造成贡献   ,不用往后转移了(这之后的都被考虑过了(下一个的1))


其实有了上一个点的期望长度,就可以套上面的三次方公式算这个点的答案了(没有x^3因为x^3作为上一个点的答案已经保存在f【i-1】里了)

次方没有可加性,所以需要拆开



码(与思维量成反比):

#include<iostream>
#include<cstdio>
using namespace std;
int i,n;
double f[100009],x,l[100009],ll[100009];
int main()
{
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%lf",&x);
		l[i]=(l[i-1]+1)*x;
		ll[i]=(ll[i-1]+2*l[i-1]+1)*x;
		f[i]=f[i-1]+(3*ll[i-1]+3*l[i-1]+1)*x;				
	}
	printf("%.1lf",f[n]);
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值