编程之美 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整除。

posted @ 2013-10-08 16:22  Linka  阅读(1122)  评论(0编辑  收藏  举报