矩形覆盖

题目描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩

形,总共有多少种方法?

同样也是一个斐波那契数列的应用,假设有F(n)种方法覆盖,那么当有F(n-1)种方法覆盖住之后,剩余只能用一

块小矩形竖着覆盖,当有F(n-2)种方法覆盖住之后,剩余的地方可以用两块小矩形横着放或者竖着放,但是如果

竖着放,则放置的方法包含在F(n-1)里面,因此F(n)=F(n-1)+F(n-2)。

 public int RectCover(int target) {
         int fpre2=1;
		 int fpre1=1;
		 if(target==0)
			 return fpre2;
		 if(target==1)
			 return fpre1;
		 int result=0;
		 
		 for(int i=2;i<=target;i++){
			 result=fpre2+fpre1;
			 fpre2=fpre1;
			 fpre1=result;
		 }

           return result;
    }
posted @ 2015-12-29 10:35  黄大仙爱编程  阅读(134)  评论(0编辑  收藏  举报