有多少种方法可以创建一个长度为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 :/)
......等等。
我需要根据此结果的算法,但我没有将这些结果相互关联。 你能帮帮我吗?
答案 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。它会让你有一天。