尽可能多地将1 * 2和1 * 3瓷砖放入n * m的地板

时间:2013-05-22 17:15:49

标签: algorithm

瓷砖可以旋转。

示例:

鉴于两个1 * 2瓷砖和一个1 * 3瓷砖,地板为3 * 3,我们将所有瓷砖放入地板,如下所示:

AAA
..B
CCB

现在,给定n * m层和p 1 * 2块和q 1 * 3块(块的数量有限)。返回可放入地板的最大瓷砖数量。例如,答案是3(你可以将3块瓷砖放在地板上)。

3 个答案:

答案 0 :(得分:5)

可能还有一些额外的复杂性,但这是我的想法:

  • 用1x2瓷砖填满整个地板。它应该很简单,只要确保它主要由平行的瓷砖组成,如下所示:(黑色和白色都是瓷砖)

    Grid

    注意我刚用水平方块而不是垂直方式填充底行,这只是为了填满网格。并且左下方的瓷砖是空的(您可能希望用1x3瓷砖替换它右侧的瓷砖)。

  • 如果您没有那么多1x2瓷砖,仍然完全填满网格,它们将在下一步中被删除。

  • 虽然您没有足够的1x2瓷砖放置,但系统地用2个1x3瓷砖替换3个平行的1x2瓷砖。所以:

    Two变为Three

答案 1 :(得分:2)

Dukeling的答案是错误的。考虑5 * 5楼层和8 1 * 3瓷砖。将所有瓷砖放入地板的唯一方法是:

AAACD
BBBCD
EF.CD
EFGGG
EFHHH

这不能通过替换来实现。

然后该怎么做?我做了很多数学工作,并且知道得很清楚。我会给你一些提示:

  1. 首先放置1 * 3个瓷砖并放入1 * 3,以便尽可能多地放置1 * 2(实际上,假设地板上有n个未覆盖的瓷砖,这样我们可以放地板(n / 2)1 * 2瓷砖)。
  2. 小心一些角落的情况。例如,所有瓷砖均为1 * 3,楼层为1 * 10,楼层为2 * 10等。
  3. 如果您有任何问题,请给我留言。

答案 2 :(得分:0)

不清楚要归还什么。您需要解决方案集还是仅需要最大数量? 一个简单的解决方案可能只使用1 * 2个瓷砖。显然,可能有更多的1 * 2瓷砖,然后是1 * 3瓷砖。

假设b=0

a = n * m div (1*2)

假设a=0m>=3n>=3

b = n * m div (1*3)