编程之美 4.2瓷砖覆盖地板问题
问题:
原有地板铺有 NxM 块正方形瓷砖老化了需要更新,但商店已经没有此类瓷砖了,只供应长方形的瓷砖,分析如何用 1x2 的瓷砖去覆盖 NxM 的地板呢?
分析:
1.N=1,M为偶数时,需要M/2块瓷砖
2.若NxM为奇数,则肯定不能用1x2的瓷砖去全部覆盖它。
(例如3x3只能放4块,3x5只能放7块,都剩余一个不能覆盖)
3.N与M中至少有一个为偶数,需要Nx(M/2)块瓷砖(这里假设M为偶数)
扩展问题:
1.求用1x2的瓷砖覆盖2xM的地板有几种方式?(设F(M)函数的返回值为摆放的种数)
1
b | ||
b |
2
b | b | |
第一块瓷砖就只有横或竖两种方式放置。
当以方式1,接下相当于要计算F(M-1).
当以方式2,接下来相当于要计算F(M-2).
可以得出递推式F(M)=F(M-1)+F(M-2),其中F(1)=1,F(2)=2。(M>2)
2.用1x2的瓷砖覆盖8x8的地板有多少种方式?如果是NxM呢?
①若地板只有1行,只有一种排法,就是全部横着排
②若地板有2行,即为扩展问题1
③大于3行,参考:
http://blog.csdn.net/limchiang/article/details/8619611
http://www.2cto.com/kf/201208/146894.html
3.用p x q的瓷砖能够覆盖N x M的地板吗?
①NxM可以被p x q整除,即地板是瓷砖所占面积的整数倍。
②N或M可以被p整除 && N或M可以被q整除。