Algorithm 如何解决这个拼图难题?

Algorithm 如何解决这个拼图难题?,algorithm,tiling,Algorithm,Tiling,[SRM 209上的1000点问题,第一部分] 在某些阶段,问题归结为以下几点: 给定三个正方形单元的块,如下图所示,可以以任何方式旋转,有多少种方式可以填充给定大小的矩形块 | x | x | | x | 例如,对于3x4块,有4种方式排列这些块。我正在寻找解决这个问题的方法,而不是实际的解决方案。我怎样才能找到更多的方法呢。有太多的方法可以实现这一点,我也没有看到DP方法的重叠子问题 欢迎您提供任何见解。毫无例外,使用L形瓷砖对pxq空间块进行的每一次平铺都将减少为使用2x3块瓷砖,由成对

[SRM 209上的1000点问题,第一部分]

在某些阶段,问题归结为以下几点:

给定三个正方形单元的块,如下图所示,可以以任何方式旋转,有多少种方式可以填充给定大小的矩形块

| x | x |
| x |
例如,对于3x4块,有4种方式排列这些块。我正在寻找解决这个问题的方法,而不是实际的解决方案。我怎样才能找到更多的方法呢。有太多的方法可以实现这一点,我也没有看到DP方法的重叠子问题


欢迎您提供任何见解。

毫无例外,使用L形瓷砖对pxq空间块进行的每一次平铺都将减少为使用2x3块瓷砖,由成对的L形瓷砖组成。即,瓷砖的形式为:

        xx      xx
        xy  or  yx  to form a vertical 2x3 block or
        yy      yy

        xyy       xxy
        xxy  or   xyy  to form a horizontal 3,2 block.

因此,您已经可以将您的问题简化为“拼花地板”——用2x3和3x2矩形拼接矩形。当然,除非你要铺一个不规则的非矩形区域——在这种情况下,你必须考虑L形瓷砖。p> 平铺是一个np问题,所以唯一的方法是将平铺分组成对,然后尝试3x2区块的每一个组合。这是一个精确的覆盖问题,你可以使用零抑制BDD解决它,而不必枚举所有解决方案。我得到了22025514的8x9,对吗?@harold:对不起,我不确定8x9的解决方案是什么。Topcoder的社论描述了每个问题的解决方案。你检查过了吗?这是错误的,例如
0011 | 0221 | 3324 | 3544 | 6557 | 6677