解决平铺问题

时间:2014-01-18 14:06:56

标签: algorithm dynamic-programming combinatorics

我最近在比赛中遇到了这个问题:

How many ways are there to fill a 4*N board completely using only tiles of 1*4 and 4*1 dimensions?

通过很多案例,我们发现了

  f(i) = f(i-1) + f(i-4) ; (i > 4)

是此问题的解决方案(动态编程)。但在我们提交并获得AC之前,我们仍然不确定这个答案。

所以任何人都可以解释我如何达到上述公式,因为它对我来说并不直观。如果问题陈述改变了,我们不得不使用尺寸为2 * 3和3 * 2的瓷砖,那么递归公式是什么呢?所以本质上我想知道如何解决这种平铺问题,方法是什么。欢迎任何好的参考链接。

由于

2 个答案:

答案 0 :(得分:3)

假设网格是N& 4高。如何覆盖左上角有两种选择:你可以用一个瓦片覆盖最左边的列,这是你的f(i-1)项;或者你可以覆盖前4列的顶行,强迫你用类似导向的瓷砖覆盖剩下的那些列,给出f(i-4)项。

答案 1 :(得分:0)

  

“所以从本质上讲,我想知道如何解决这些问题,方法是什么。欢迎任何好的参考链接。”

MIT Opencourseware有一个算法类介绍。以下是该课程“动态编程讲座”的链接。

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/lecture-15-dynamic-programming-longest-common-subsequence/

祝你好运!