Sicily 1121. Tri Tiling

题目链接:Sicily 1121

题目截图:

思路一:(参考自一同学wzt)

上图基本就能够清楚地说明这种思路。

对于3*n的图像,存在两种可能:一种是刚好成为一个矩形,我们把这种可能性都输出来记在dp[n][0]中;另一种是末尾呈L形或者倒L形的,或者说,第n行只有一格,这种情况的所有可能数我们记在dp[n][1]中。

dp[][2]的初始值为:

dp[0][0] = 1;
dp[2][0] = 3;
dp[2][1] = 2;
然后用一个循环完事,循环体内:

dp[i][0] = dp[i - 2][0] * dp[2][0] + dp[i - 2][1];
dp[i][1] = dp[i - 2][0] * dp[2][1] + dp[i - 2][1];

最终输出dp[i][0]即可。


思路二:(参考自 http://blog.csdn.net/hewei0241/article/details/12051173

在这种思路里,首先是将n分成奇偶两种情况,奇数的情况下显然可能的组合数为0(思路一其实是默认了输入中只有偶数的),而偶数的情况下则采用下面的算式:

num(n) = 3*num(n-2) + 2*num(n-4) + ... + 2*num(0);
当然了,仔细对比上式跟思路一中最后给出的两个归纳式,会发现其实思路一中的两个归纳式合在一起、推下去,也就得到上式了。

该怎么去理解这种思路呢?

其实可以认为是一个“往前推”的过程:

要使3*n是一个矩形,那么有两种可能

1. 3*(n-2)也是一个矩形,那么只要再拼上一个3*2的就可以了,这也就是3*num(n-2)的由来了,系数3是3*2的可能组合数。

2. 3*(n-2)不是一个矩形,这种情况下,你只有一种添加2*1块的方法使得3*n是矩形(详见上图),还需要对3*(n-4)的形状做判断

    1. 3*(n-4)是一个矩形,那么只要再拼一个L形或者倒L形就可以使得3*(n-2)不是矩形了,这里就是2*num(n-4)

    2. 3*(n-4)不是一个矩形,那么也是只有一种添加2*1块的方法能使3*(n-2)不是矩形,接下来就来考虑3*(n-6)

         1. 3*(n-6)是一个矩形,那么只要再拼一个L形或者倒L形就可以使得3*(n-4)不是矩形了,这里就是2*num(n-6)

         2. 3*(n-6)不是一个矩形,……

从上面这个过程,我们就应该能够理解那个计算的式子了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值