我试图解决Defense of a Kingdom problem并提出了一种算法,但它超出了问题的时间限制。

我想知道一个好的算法可以在规定的时间内解决这个问题。

问题:

最佳答案

我会这样:

给定wh作为运动场的宽度和高度,并将塔的坐标指定为(x1,y1) .. (xN,yN),将坐标分成两个列表x1..xNy1..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,因为其中包括了较高坐标塔所覆盖的线,但未发现该线。

10-05 23:47