这题我0分。
比赛时,我一眼出正解,哈哈,太水了!
这题不就是一个二分+DP+单调队列吗?
然而,细节决定成败。
我错了许多细节,就挂了。
我只考了0分。。。
首先,这题满足一个条件:
保证g变大后,如果原来满足条件,现在也会满足条件;而如果原来不满足条件,现在就有可能满足条件。
g变小后,如果原来满足条件,现在不一定会满足条件;而如果原来不满足条件,现在就一定不可能满足条件。
所以,我们可以用二分找出最合适的g的值。
已知, 0 ≤ g ≤ 1 0 9 {0\leq g\leq 10^9} 0≤g≤109,且跳跃的范围是 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+a≤Xi⋀Xj+b≥Xi)
其中,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
【NOIP2017】跳房子
最新推荐文章于 2023-08-19 09:01:20 发布