题目大意:2xN放2x1和2x2的方块多少种放法。
分析:a[n]=a[n-1]+a[n-2]*2
2xN相当于2x(n-1)加一个竖着的方块,和2x(n-2)加两个竖着的,两个横着的,一个大方块,其中放两个竖着的重复。
代码:
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string s[255];
string add(string x, string y)
{
if (x.length() < y.length())
swap(x, y);
int i, j;
for (i = x.length() - 1, j = y.length() - 1; i >= 0; i--, j--)
{
x[i] = x[i] + (j >= 0 ? y[j] - '0' : 0);
if (x[i] - '0' >= 10)
{
x[i] = (x[i] - '0') % 10 + '0';
if (i)
x[i - 1]++;
else
x = '1' + x;
}
}
return x;
}
int main()
{
s[0] ="1";
s[1] = "1";
s[2] = "3";
for (int i = 3; i <= 250; i++)
s[i] = add(add(s[i-1],s[i-2]),s[i-2]);
int m;
while (scanf("%d", &m) != EOF)
cout<<s[m]<<endl;
return 0;
}