题意,给一个两行m列的矩阵,要求遍历每一个点并且每一个点只能遍历一遍,并且每个点在开始的ai,j时间内都会锁住不能访问,要求最短时间
思路:稍加思索就能发现,对于一个只有两行的图来说,只有两种方式能遍历全图,且只访问每一个点一遍,分别是蛇形从小到大按列遍历,和按行遍历。由于该题给出的列数较多,我们按列来看,遍历的方式一定是从按列转向按行的(即使全是蛇形遍历,最后也会有一个竖向的按行遍历过程),因此,我们可以枚举分界点来找到最小值
于是我们发现了一个严酷的问题,如果对于每一个分界点都进行依次按行遍历的话,n^2的复杂度必然会导致超时,于是我们考虑预处理出所有分界点后按行遍历所需要的时间数,然后再枚举分界点。
于是我们发现仍有两种情况1.按行遍历不被卡,为a[i][j]+(n-i)*2或(n-i)*2-1的时间,或者被卡,从大到小按列取a[1-j][i]+1,dp[j][i+1]+1的最大值
最后再枚举分界点的时候需注意终点的列数如果是奇数,那么终点就在第一行,如果是偶数,那就在第二行。因此使用预处理出的按行遍历的dp值时需要注意奇偶。然后就是需要用一个变量记录枚举到i位置时的即使后面不卡也需要的最大时取max
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<string>
#incl