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
浙公网安备 33010602011771号