平铺方案
ybtoj DP-1-5
题目大意
求用1×21\times 21×2和2×22\times 22×2的瓦片平铺2×n2\times n2×n矩形的方案数
输入样例
2
8
12
100
200
输出样例
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251
数据范围
0⩽n⩽2500\leqslant n\leqslant 2500⩽n⩽250
解题思路
对于2×22\times 22×2的瓦片只能直接放
而对于1×21\times 21×2的瓦片有两种铺法:
1.横着放
2.竖着放两个,变成2×22\times 22×2的瓦片
fi=fi−1+2×fi−2f_i=f_{i-1}+2\times f_{i-2}fi=fi−1+2×fi−2
然后高精一下即可
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int n, g, f[260][110];
int main()
{f[0][1] = 1;f[1][1] = 1;for (int i = 2; i <= 250; ++i)//预处理{for (int j = 1; j <= 100; ++j){f[i][j] += f[i - 1][j] + f[i - 2][j] * 2;f[i][j + 1] = f[i][j] / 10;f[i][j] %= 10;}}while(~scanf("%d", &n)){g = 100;while(!f[n][g]) g--;for (int i = g; i > 0; --i)putchar(f[n][i] + 48);putchar(10);}return 0;
}