问题描述:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。
请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解析:当n = 1时,只有一种方法,竖着放。
当n = 2时,有两种,横着放,或者竖着放,
当n >= 3时,和斐波那契数列类似。先分为第一步是横着放还是竖着放,然后分别求出各自剩余的未覆盖矩形的覆盖方法。让最中结果相加。
int RectCover(int number)
{
int f1 = 1;
int f2 = 2;
int sum = 0;
if (0 >= number)
return 0;
if ((1 == number) || (2 == number))
return number;
while (3 <= number--)
{
sum = f1 + f2;
f1 = f2;
f2 = sum;
}
return sum;
}