原题读起来感觉有一点绕,不过题意很简单:其实就是计算机要重复地做一些相同的任务,每个任务需要一定时间,在这段时间内可能会用到不同的处理器(共有5个处理器)。一个处理器在使用的时候会锁住,其他的任务就不能访问了。只能等到下一个clock cycle再使用这个处理器。
任务使用处理器的pattern就是input,比如
7
X...XX.
.X.....
..X....
...X...
......X
就代表每个任务耗时7个cycle,X表示在这一个cycle内这个处理器会被使用。
问题是:现在有10个这样的任务,如何安排他们使得计算机在最短时间内处理完所有任务。每个任务耗时小于20个cycle。输出最短的时间。
理解了题意之后,可以大概得出一个解法,想法并不难(但是要AC还是有点难度。。):
回溯法dfs,模拟八皇后问题,每次尝试在下一个位置“放置”一个任务,看看会不会和之前的任务有冲突。
但是这道题的难点是,需要得出所有可能的结果,最后选出一个最小的。但是可能的结果是无穷多的(因为只要不冲突,可以往后面的任意位置摆放),一点点分析可以得出答案应小于200(即任务之间完全没有重叠)。但是解答树的节点还是太多了,如果不剪枝,最坏情况下结点数的规模大概是20^10(每个任务最多有20种摆放的位置,共有10个任务),会TLE
<