题意太杀了,而且根本没法往状压 DP 方面想……
首先,补充题意:同一时刻只能移动一个骑士!
第二,八方移动下,两点最短路是切比雪夫距离。
考虑到骑士间互不干涉,可以对于每个骑士独立地计算再合并。
(如果有别的骑士挡路可以直接避开,其他避不开的肯定不是最优解。)
骑士仅会停留在初始位置或是某个人质的位置。
设 fi,S,j 表示第 i 个骑士俘获的人质构成 S 集合,最后俘获的是 j。
转移时,枚举 i,S,j 和将要俘获的人质 k,那么有转移: fi,S⋃{k},k=minfi,S,j+dis(pj,pk)
其中 pi 表示第 i 个人质的坐标,dis(x,y) 表示 x,y 的切比雪夫距离。
然后考虑合并答案,设 gi,S 表示前 i 个骑士共拯救了集合 S 内的人质。
枚举 i,S 和这个骑士俘获的人质 S′⊆S 和他最后俘获的人质 j。
有 gi,S=mingi−1,S−S′+fi,S′,j
注意一些初值。
代码:
1 |
|