BZOJ3450 Easy-概率与期望-递推

121 篇文章 0 订阅
15 篇文章 0 订阅

传送门

题目大意:给定一个01序列,其中有某些字符未知(记为?),是0或1的概率相等,各50%。

序列的值定义为序列中极长的0序列的长度的平方的和。求期望值。

解:一看概率题想递推。

记f[i]为到第i位,期望值是多少。

那么如果第i位是0,那么f[i]=f[i-1]+(第i位是0的贡献)。

在f[i-1]的基础上,第i位是0对f[i]的贡献,显然就是(到第i位的极长0序列的长度)^2-(到第i-1位的极长0序列的长度)^2

所以还要统计到第i位的期望极长0序列长度,记为len[i]。那么上式的贡献计算出来就是2*len[i]-1(因为在这种情况下len[i]=len[i-1]+1)

那么如果第i位是0,则len[i]=len[i-1]+1,f[i]=f[i-1]+2*len[i]-1。

如果第i位是1也好办,len[i]=0,f[i]=f[i-1]。

但如果第i位是?,len是好办的,len[i]有50%概率=0,50%的概率=len[i-1]+1,那么期望长度是(len[i-1]+1)/2。

但是f[i]呢?开始的时候想的是这样的:f[i]=f[i-1]+(2*len[i]-1)/2=f[i-1]+len[i]-0.5,理由是这样的:既然这一位是?,

那么就有50%的概率没有贡献,即0;50%的概率贡献和第i位是0的贡献相等。所以期望贡献就除以2即可。

但可惜是不对的。

个人认为原因可以如此解释:如果用len[i](我指的是已经用len[i-1]计算出来的那个(len[i-1]+1)/2),那么len[i]就包含了第i位是1的期望。

也就是说,50%的贡献中,并不全是第i位是0带来的,还有部分是1带来的。也就是说答案会偏小。

所以全期望公式应当更加慎重小心的使用:

50%的几率长度为0,贡献为0.

50%的几率长度为len[i-1]+1,贡献为(len[i-1]+1)^2-len[i-1]^2=2*len[i-1]+1。

所以期望长度=(len[i-1]+1)/2,期望贡献为(2*len[i-1]+1)/2=len[i-1]+0.5。

注意到len[i]和f[i]都只由len/f[i-1]决定,所以只用一个变量递推即可。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值