C. Robot in a Hallway

题目链接

https://codeforces.com/contest/1716/problem/C

使用了dp的思想,因为格子上的数是锁定时间,所以只有在第(锁定时间+1)的时间才能走到格子上。只有两行,大体思路比较好想,但处理起来细节很多。

思路:

显然走法一定是先蛇行,后直行的方式(多模拟两遍就能看出来),那只需确定两种走法的分界点即可。

分析:

对于蛇行:方向为:下 右 上 右......当走完某次上/下时,就切换到直行模式。

对于直行:方向为:右  下/上  左。当直行起始点在奇数列时向下,直行起始点在偶数列时向上。(原先我想在每个点都断开求前缀后缀,但其实不用)

由此,可以用数组dp_start[]存放蛇行至当前列所需时间,用数组dp_end[]存放直行剩余列完毕所需时间。

答案ans=min(ans, max(dp_start[i]+(m-i)*2+1, dp[end]))。+1因为从蛇形部分走到直行要花费1的时间。

注意这里max中的两个参数:前面最大则后面的不用管,后面最大则前面的不用管。因为如果前面等待时间较长,那走完蛇行后直行部分就已经全部解锁,如果后面等待时间较长,则走完蛇行后直行部分还未解锁(分别把蛇行部分和直行部分各看作一个整体,dp_start[]和dp_end[]存的相当于这两个整体的解锁时间)

下面是原作者题解链接,内含详细图解思路:

https://blog.csdn.net/weixin_43918473/article/details/126185515

 

posted @ 2022-08-09 16:32  mucstdio  阅读(148)  评论(0)    收藏  举报