我试图解决Defense of a Kingdom problem并提出了一种算法,但它超出了问题的时间限制。
我想知道一个好的算法可以在规定的时间内解决这个问题。
问题:
最佳答案
我会这样:
给定w
,h
作为运动场的宽度和高度,并将塔的坐标指定为(x1,y1) .. (xN,yN)
,将坐标分成两个列表x1..xN
,y1..yN
,对这两个坐标列表进行排序。
然后计算空白空间,例如dx[] = { x1, x2-x1, ..., xN - xN-1, (w + 1) - xN }
。对y坐标执行相同的操作:dy[] = { y1, y2-y1, ..., yN - yN-1, (h + 1) - yN }
。将max(dx)-1
乘以max(dy)-1
,您应该拥有最大的未覆盖矩形。您必须将增量值减1,因为其中包括了较高坐标塔所覆盖的线,但未发现该线。