下面个人部分的理论还没有归纳给出,请先不要看,待我补充
首先是引用《很好的递推题:铺磁砖和走格子》的博客,下面是摘自这博客的某些内容。
*题一:用1 x 1和2 x 2的磁砖不重叠地铺满N x 3的地板,共有多少种方案?
样例输入:2
样例输出:3
博主@billhsu1024给出的答案是:
先设一个f[i]表示i*3的地板铺的方法,f[1]=1;f[2]=3;
i*3的地板数是这样得到的:(i-1)*3的地板比i*3的地板少的地方全铺上1*1的瓷砖,这有一种铺法;或者在(i-2)*3的地板比i*3的地板少的地方铺上2*2的瓷砖和2个1*1的瓷砖,这有两种铺法;
所以得到递推式:f[i]=f[i-1]+2*f[i-2];
为了更好的理解上面的答案,下面有这样两个疑问:
Q1:对于N=(i-2)的形式,为什么N=(i)是在前者的基础上,【1*3空白的地方(也即多出来的2*3的格子)中的铺法 】*【N=(i-1)时候的铺法】+【2*3空白的地方(也即多出来的2*3的格子)中的铺法 】*【N=(i-2)时候的铺法= 【N=(i)的铺法】?
Q2:再细分一点,为什么增加了2*3(1*3的也同理)空白的地方,相应的铺法就增加到(注意是增加到而不是增加了):
【2*3格子的 铺法】*【原来的铺法】。 只要解决了Q2,Q1也就理解了。可能有人不理解上面的问题,我这样举个例子吧:
对于这个格子,上面给出的铺法是f(3)+2*f(1) = 5种。那么当我们增加2*3的空白地方的时候,格子就变成这样
了:,可以知道在空白的地方有这两种铺法:
和
,这就是2*f(1)的原因,然后就有疑问了:为什么不可以跨界铺呢?就是像这样子:
,这不就是和前面的铺法不同,所以算是另一种铺法了吗?
疑问的解答是:当使用这种铺法的时候,虽然增加了一种铺法,但是相应的,由于侵占了前面的黄色格子,原来3*3黄色的格子的铺法也要减少了,至于减少多少,会有某种关系,这里不再深入。我们只需要知道 当需要满足这条公式【1*3空白的地方(也即多出来的2*3的格子)中的铺法 】*【N=(i-1)时候的铺法】+【2*3空白的地方(也即多出来的2*3的格子)中的铺法 】*【N=(i-2)时候的铺法= 【N=(i)的铺法】的时候,空白的格子的瓷砖不能干扰到前面的铺法。
注意:后面的子f之间不能存在包含关系。
下面再举多一个牛客的例子强调一下包含关系:
步骤:
1. 由于瓷砖可以横着和竖着放,我们可以把1*3和3*1看做是两种瓷砖。
2. 构造不同的空白格子