专栏文章
Imaichi Solution
P13501题解参与者 27已保存评论 34
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 34 条
- 当前快照
- 1 份
- 快照标识符
- @miovrxap
- 此快照首次捕获于
- 2025/12/03 01:57 3 个月前
- 此快照最后确认于
- 2025/12/03 01:57 3 个月前
Journey
行从上往下没有后效性,还是最优化问题,很容易想到 dp。
设 表示走到 这一格的最多的摩拉,如果走不到就用 表示。
那么初状态是 ,接着要考虑两种转移,一种是行改变的,另一种是行不改变的。
行改变的相对简单 。
行不改变的就在这一行内进行转移。这时候发现原来的无后效性不存在了,于是需要发现性质,如果路径不绕圈就是往一个方向进行转移,可以直接
对于绕圈的,如果这个圈非正,可以贪心去除,那么它绕了一个正圈,一个绕圈路径可以分成很多连续段,也就是有一个连续段之和为正,也就是存在两个相邻的数,他们的和 。那么如果第一次碰到这两个格子的时候,碰到第一个格子的时候,肯定是有非负的摩拉,因为我们假设了这条路径,那么再经过另一个点,因为和为正,肯定也是非负的,然后还可以再次经过这两个点,得到形如 的路径。“刷摩拉”,一直达到上界 。那么可以直接把这两个格子中 非负的格子的 改成 。(比如 )那么从 到 要么是直接走,要么就是需要到某个格子刷摩拉走一条左侧的折线或者右侧的折线,来刷摩拉。具体实现从左往右扫,从右往左扫,再从左往右扫即可。
但是这里没有考虑既往左又往右的情况。加上就是完备的,为什么?如果左侧有两个刷币点,那么能够前往最近的,就可以完成满币,不必前往下一个点。右侧同理,所以对于 的样子, 是入口, 是出口, 是刷币点,可能走出来 的路线,本质就是看 哪个更优。每一次转折都一定要刷币,而关键的刷币点只有两个,所以最多转折两次,于是代码就是从左往右扫,从右往左扫,从左往右扫,从右往左扫。
统计答案就是得到 然后和 比大小,得到答案。
相关推荐
评论
共 34 条评论,欢迎与作者交流。
正在加载评论...