题目:有两种瓷砖,1x1的方形以及2x2的L形,问铺满nx2的地面有多少种方法。
分析:数学题,动态规划(DP)。找到递推公式打表计算查询输出。
因为宽度为2,所以题目很简单不需要使用搜索+dp求解;
我们发现如果有L形的瓷砖,只能形成2x2(有4种可能)和2x3(有2种可能)的小块组合;
没有L形瓷砖直接在右侧加两块1x1的方形瓷砖即可;
所以可以找到递推公式:f(n)= f(n-1)+ 4 * f(n-2)+ 2 * f(n-3);
说明:(⊙v⊙)。
#include <stdio.h>
#include <stdlib.h>
long long f[45];
int main()
{
f[0] = 1LL;
f[1] = 1LL;
f[2] = 5LL;
for (int i = 3; i <= 40; ++ i) {
f[i] = f[i-1] + 4*f[i-2] + 2*f[i-3];
}
int t, n;
while (~scanf("%d",&t))
while (t --) {
scanf("%d",&n);
printf("%lld\n",f[n]);
}
return 0;
}