010矩形覆盖
题目:
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
方法:循环(动态规划)
思路:当n为1时,只能竖着,1种方法;当n为2时,可以两根竖着也可以两根横着,2种方法;当为n时,竖着放,剩下的有n-1时的种数,横着放两根,剩下的有n-2时的种数,于是动态规划的递推式为:
dp[n]=dp[n-1]+dp[n-2];
代码:
public int RectCover(int target) {
if(target<=0) return 0;
else if(target==1) return 1;
int[] dp = new int[target+1];
dp[1]=1;
dp[2]=2;
for (int i = 3; i <=target ; i++) {
dp[i]=dp[i-1]+dp[i-2];
}
return dp[target];
}