有多少种方法可以用砖砌墙?

时间:2014-12-13 16:57:14

标签: algorithm recursion

有多少种方法可以创建一个长度为n且高度为2的墙用砖? 我们的砖块尺寸为2x1和1x1。砖是二维的。

For example;
if n=1, we need one 2x1 or we need two 1x1 bricks    
        so result is 2 different way

if n=2, we need two 2x1 (vertical and horizontal) 
        or we need four 1x1 bricks                    
        so result is 7 different way

if n=3, result is 20 (Unfortunately I'm not sure :/)

......等等。

我需要根据此结果的算法,但我没有将这些结果相互关联。 你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

说墙有两层N“槽”。

P [L1] [L2] =放砖的可能性的数量,以便第一层的第一个L1槽和第二层的第一个L2槽用砖材料填充。

例如,此配置在P [3] [4]中捕获(砖块有数字:11,22,3,44):

(1st level =>) 1122
(2nd level =>) 344

案例1:L1 = L2

....
....

你在一端垂直放置一个2x1砖=>您将P [L1-1] [L2-1]添加到P [L1] [L2]

...1
...1

你在结尾处的1级放置一个1x1砖=>您将P [L1-1] [L2]添加到P [L1] [L2]

....
...1

你在末尾的第2级放了一个1x1砖=>将P [L1] [L2-1]添加到P [L1] [L2]

...1
....

您将两个2x1砖水平放置,一个放在第1层,一个放在第2层=>将P [L1-2] [L2-2]添加到P [L1] [L2]

..22
..11

现在我们已经完成了它在垂直线上结束的情况。由此我们观察到你的问题的解决方案是P [N] [N]。但是,当砖块在两个层面上没有达到相同的长度时,我们就会遇到这种情况。

案例2:L1-1 = L2,类似

...
....

你把一个1x1砖放在等级1 =>将P [L1-1] [L2]添加到P [L1] [L2]

...
...1

你将一个2x1砖水平放置在等级1 =>将P [L1-2] [L2]添加到P [L1] [L2]

...
..11

案例3:L1 + 1 = L2,简单对称。

这里的想法是案例不应重叠,即一个砖块配置不应多次计算。现在我们完成了一般情况。你剩下的就是处理最初的案件。

案例无 - 无:P [0] [0] = 1(您只能有一个零长度的墙)。

Nothing
Nothing

无案例-1:P 0 = 1(您只能在第2级添加1x1砖)。

.
Nothing

案例1 - 无:P 1 [0] = 1(您只能在级别1上添加1x1砖块。)

Nothing
.

在纸上执行此操作并确保所有索引都正确。

也坐下来理解这个TopCoder tutorial on dynamic programming。它会让你有一天。