题目链接:http://poj.org/problem?id=2506
题目大意:给出一个n,代表一个2*n的矩形地板,要求只用2*1和2*2两种瓷砖将其完全覆盖,求所有情况的数量
解题思路;求出递推公式:f(n)=2*f(n-2)+f(n-1),这道题还有另外一个关键点是高精度,因为题目提到n可能会达到250,因此答案的数字将会非常大,long long型照样会爆掉,因此采用数组模拟加法和乘法,开始的时候把第24行:if(c.num[len+1]!=0)c.len=len+1;写成了if(c.num[len+1]!=0)c.len++;导致计算错误,找了很久才发现问题,全是泪……一定要细心啊
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
struct bignum{
int len,num[1000];
}dp[255];
void add(bignum a,bignum b,bignum &c)
{
int len = a.len>b.len?a.len:b.len;
for(int i=1;i<=len;i++)
{
c.num[i] = a.num[i]+b.num[i];
}
// for(int i=len;i>=1;i--)cout<<c.num[i];
// cout<<endl;
for(int i=1;i<=len;i++)
{