Algorithm ACM:创建给定拼图形状的图案
我正在为我的国家的ACM竞赛做准备,我被这个问题困住了,我也不知道该用什么算法 问题是: 给定一个拼图模式,你需要知道它是否只能通过使用带有L形的拼图来构建(如下图所示)。Algorithm ACM:创建给定拼图形状的图案,algorithm,Algorithm,我正在为我的国家的ACM竞赛做准备,我被这个问题困住了,我也不知道该用什么算法 问题是: 给定一个拼图模式,你需要知道它是否只能通过使用带有L形的拼图来构建(如下图所示)。 (来源:) 所以在这个例子中,答案是肯定的,因为左边的图案可以由这件作品构成。作品总是一样的,图案在输入中给出 以下是限制条件 Input The first line of input contains one positive integer T (1 <= T <= 100), the number
(来源:) 所以在这个例子中,答案是肯定的,因为左边的图案可以由这件作品构成。作品总是一样的,图案在输入中给出 以下是限制条件
Input
The first line of input contains one positive integer T (1 <= T
<= 100), the number of test cases.
Each test case starts with a line that contains two integers H and W
(1 <= H, W <= 500), which represent the height and width of the grid
containing the pattern. The following H lines, each containing W
characters, denote the grid. Each character is either 'R' (red), 'W'
(white) or '.' (empty space). Each grid contains at least one 'R' or
'W' character.
Output
For each test case, on a separate line, output either 'YES' if
it is possible to construct the pattern with the puzzle pieces, or
'NO' otherwise.
Constraints
Time limit: 15 seconds
Memory limit: 64 megabytes
我认为应该采用一种合理的方法 下面是一个算法:-
我认为应该采用一种合理的方法 下面是一个算法:-
在一般情况下,这将是一个暴力问题,无法解决这种规模,但暗示是,他们给了你一个额外的约束(红方块),这实际上简化了问题 这是一个问题,有一个非常简单的教科书算法 诀窍是将问题建模为2-SAT问题。基本上,如果您注意到,一旦您将“L形”放置在红方块上,您有两个独立的选项:
- 您可以选择占据红场左侧的广场或右侧的广场李>
- 你可以选择占据红场上方或下方的广场
请注意,您还需要进行一些额外的检查,例如,每个连接组件中的白色方块数必须正好是红色方块数的两倍。在一般情况下,对于这种大小,这将是一个无法解决的蛮力问题,但提示是,它们给了您一个额外的约束(红色方块)这实际上简化了问题 这是一个问题,有一个非常简单的教科书算法 诀窍是将问题建模为2-SAT问题。基本上,如果您注意到,一旦您将“L形”放置在红方块上,您有两个独立的选项:
- 您可以选择占据红场左侧的广场或右侧的广场李>
- 你可以选择占据红场上方或下方的广场
请注意,您还需要进行一些额外的检查,例如,每个连接组件中的白色方块数必须正好是红色方块数的两倍。如果我理解正确,您建议采用蛮力方法。如果有500x500个输入,可能会有8000个左右,第一个可以用4种方式放置,第二个可以用4种方式放置…最后4种方式让我们假设你设法将8000个减少到1000个,你不知道位置在哪里,仍然是4^^1000个方式,在合理的时间内永远无法解决。我认为暴力,在一般情况下,如果您使用深度优先搜索之类的方法,则不需要使用那么多功能。决策树可能很早就被截断。@Rhymoid这不是暴力问题。即使使用optimiza,也没有办法
input output
2 NO
3 3 YES
W..
RW.
WRW
3 4
RWW.
WWRW
..WR