/* [矩形覆盖] [题目] 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? [解析] 假设覆盖总共有 f[n] 种方法,可以得递归式: f[n] = f[n-1] + f[n-2] // 当小矩形竖着放时,大矩形还剩下 n-1 的规模,当小矩形横着放时,大矩形还剩下 n-2 的规模。 */ #include <iostream> #include <vector> #include <algorithm> using namespace std; class Solution{ public: int rectCover(int number) { // f[n] = f[n-1] + f[n-2] // f[1] = 1, f[2] = 2; if(number == 0) // special case return 0; if(number == 1) return 1; if(number == 2) return 2; int f1 = 1; int f2 = 2; for(int i=3; i<=number; i++){ int temp = f1 + f2; f1 = f2; f2 = temp; } return f2; } }; int main() { return 0; }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15265.html