You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
// C++ 算法篇 递推
|
|
|
|
|
// https://blog.csdn.net/weixin_43736974/article/details/108246801
|
|
|
|
|
/*
|
|
|
|
|
【问题分析】
|
|
|
|
|
用 f(n) 表示 n×3 的路面有多少种不同的铺设方案。把路面看成n行3列,则问题可以分成两种情况考虑,一种是最后一行用 3 块 1×1 的瓷砖铺设;
|
|
|
|
|
另一种是最后两行用 1 块 2×2 和 2 块 1×1 的瓷砖铺设(最后两行就有两种铺法),第一种铺法就转换为 f(i-1) 的问题了,第二种铺法就转换成 f(i-2) 的问题了。
|
|
|
|
|
根据加法原理,得到的递推关系式为 f(i) = f(i-1) +f(i-2)×2,边界为 f(0)=1,f(1)=1。
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
int f(int n) {
|
|
|
|
|
if (n == 0) return 0;
|
|
|
|
|
if (n == 1) return 1;
|
|
|
|
|
if (n == 2) return 3;
|
|
|
|
|
return dp(n - 1) + 2 * dp(n - 2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
int n;
|
|
|
|
|
n = 3;
|
|
|
|
|
|
|
|
|
|
cout << dp(n) << endl;
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|