【发布时间】:2015-01-22 08:31:23
【问题描述】:
我很想知道解决这个问题的算法。问题陈述的正式描述是这样的——给定 N(
Input:
5
01000
00010
Output:
1
输入中的 0 代表一个空单元格和 1 个禁止单元格。 我在这里Hexagonal Grid Tiling 发现了一个类似的问题。尽管稍微提到了使用位掩码动态编程解决这类问题,但我无法找到有关该技术的任何详尽解释。
PS:虽然我知道如何解决一般的网格平铺问题,但在这个问题中,只有当我们只给出空单元格时,才能形成递归式 F(n) = F(n-1) + F (n-2),通过放置一个 1x2 多米诺骨牌或放置两个 2x1 多米诺骨牌分别覆盖第一列和前两列。这可以迭代解决,甚至对于大 N(比如 > 10^7),我们可以使用矩阵求幂技术。但我有兴趣了解 DP+Bitmasks 解决这类问题的技术。任何帮助将不胜感激。
【问题讨论】:
-
有趣的问题,但我认为这在 stackexchange 网络上的数学站点之一上更合适。
-
我会等待,如果我没有看到自己得到答案,我肯定会在那里发布。但是我觉得我在这里感兴趣的动态编程方面更多地属于 SO。即使 DP 的标签计数是 1362 >> 它在 Math SE (89) 中是什么 :)
-
这个特殊问题可以使用 FKT 在多项式时间内解决任意网格。
标签: c++ algorithm dynamic-programming bitmask tiling