【NOIP2017】跳房子

这题我0分。
比赛时,我一眼出正解,哈哈,太水了!
这题不就是一个二分+DP+单调队列吗?
然而,细节决定成败。
我错了许多细节,就挂了。
我只考了0分。。。
首先,这题满足一个条件:
保证g变大后,如果原来满足条件,现在也会满足条件;而如果原来不满足条件,现在就有可能满足条件。
g变小后,如果原来满足条件,现在不一定会满足条件;而如果原来不满足条件,现在就一定不可能满足条件。
所以,我们可以用二分找出最合适的g的值。
已知, 0 ≤ g ≤ 1 0 9 {0\leq g\leq 10^9} 0g109,且跳跃的范围是 Max(1,d-g) ~ d+g。
我们就可以列出状态转移方程了: F i = m a x ( F j ) + S i     ( X j + a ≤ X i ⋀ X j + b ≥ X i ) {F_i=max(F_j)+S_i\space\space\space(X_j+a\leq X_i \bigwedge X_j+b\geq X_i)} Fi=max(Fj)+Si   (Xj+aXiXj+bXi)
其中,a为跳跃最短距离,b为跳跃的最长距离。
这样做的时间复杂度是 O ( l o g 2 1 0 9 n 2 ) {O(log_210^9n^2)} O(log2109n2),很明显会时超50分。
所以,我们就要把DP优化一下了。
我们很容易发现,状态转移方程中,对于不同的i, m a x ( F j ) {max(F_j)} max(F

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值