Description–
解题思路–
万恶的高精
设f[i]为平铺2*i矩形的方案数
- 2*(i-1) 矩形加一块 2*1 矩形,方案数为f[i-1]
- 2*(i-2) 矩形加一块 2*2 矩形,方案数为f[i-2]
- 2*(i-2) 矩形加两块 2*1 矩形(横着放),方案数为f[i-2]
所以 f [ i ] = f [ i − 2 ] ∗ 2 + f [ i − 1 ] f[i]=f[i-2]*2+f[i-1] f[i]=f[i−2]∗2+f[i−1]
代码–
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n;
string f[300];
string operator +(string a, string b)
{
string ss = "";
int aa, bb, cc, tt = 0;
while (a.size() || b.size())
{
aa = bb = 0;
if (a.size()) aa = a[a.size() - 1] - '0', a.erase(a.size() - 1, 1);
if (b.size()) bb = b[b.size() - 1] - '0', b.erase(b.size() - 1, 1);
cc = aa + bb + tt;
tt = cc / 10, cc %= 10;
ss = char(cc + '0') + ss;
}
if (tt) ss = char(tt + '0') + ss;
return ss;
}
int main()
{
f[0] = f[1] = '1', f[2] = '3';
for (int i = 3; i <= 250; ++i)
f[i] = f[i - 2] + f[i - 2] + f[i - 1];
while (~scanf("%d", &n))
cout << f[n] << endl;
return 0;
}