题解:P3148 [USACO16OPEN] Bull in a China Shop P

· · 题解

题号这么小的黑题还没有题解,我给完善一下。

一个想法是枚举三块拼图和他们的旋转角度、是否翻转以及坐标,这样的复杂度是 O(K^3N^4) 的(忽略枚举方向的 8 倍常数)。

要优化这个算法,我们有以下方法:

第一个优化使得枚举前两块拼图时无需枚举其位置,第二个优化使得枚举第三块拼图时可以 O(1) 判断,时间复杂度来到 O(K^2N^2)

如果 R, C 如题面说的一样在 100 之内,那这个复杂度确实是能过的(100^4 = 10^8),但是数据中 R, C 好像和 N, M 一个量级,再加上 8 倍常数的影响,肯定是无法通过的。这时需要一些剪枝:

这三个剪枝不容易同时卡掉至少两个(或者说数据没卡),可以通过。