题解
知识点:
DP,方格类最优值DP,单调队列优化DP
分析:
相信这道题大家都知道肯定是DP,然而非常简单地想到,从上一层的每个点枚举走到这个点的最大值。
一开始看到这个数据范围我就觉得可以硬做,但是又想到这样的裸的DP是$O(n^3)$的,不能通过所有的测试点。然后我想到了单调队列优化DP,可以优化到$O(n^2)$,当然这样是正确的解法,但是我又觉得细节有点多,还不如我写一个带log的数据结构去优化DP,然后我就写了一棵线段树维护区间最大值,但是常数太大还是TLE了最后一个点,用ST表写反而WA了8个点。最后不得不再次观察数据范围。
发现其实k的值非常小(与n同阶)。所以考虑先把所有有值的点按照x轴来排序(从上往下),然后进行DP。枚举之前行的点,因为每一行跳t步的话,x行最多可以跳xt步,那么判断$\Delta y$与$\Delta x\times t$之间的关系,如果前者不大于后者,那么代表走得到,就可以转移。这样求最大值,复杂度是$O(n^2)$的,而且常数很小,值得推荐。
代码:
1 |
|
从这道题,我们可以发现,当一些题目n不小的时候,可以观察其他约束条件,从简单的问题入手,往往可以收获更好的结果。