hdu 4487 Maximum Random Walk(概率dp)

题意:最开始你在原点,每次有一定概率向左走一步,或者向右走一步,或者不动,现在要求,走了n步以后,走到的最右边的位置的期望。

思路:其实很简单,期望就是Σ走到最右点的概率*点权。那么枚举走到的最右端点,用概率dp算一下就行了。刚开始的状态是这样的:dp[i][j][k]当前还要走i步,此时的位置在j,剩下的路程中不能走到超过k的位置的概率。这样的话,对于每个枚举的位置x来说,结果就要加上x*(dp[n][0][x] - dp[n][0][x-1]),其实这个复杂度已经可以过了,但是我sb的把标记弄错了,结果来了个超时,我以为是数据比较变态,想了想,发现状压还可以进行压缩。其实当前在的位置并不重要,我们只关心当前距离限制的最右边还有多远,那么状态就可以写成dp[i][j]:当前还需要走i步,此时距离限制的位置的距离为j的概率0。这样就将复杂度优化到了O(n^2)。dp的时候改变一下状态或许就可以得到更优的复杂度,这一点还是值得思考的。


代码:


#include<iostream>
#include<cstdio>
#include<cstring>
#in
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值