题目:http://poj.org/problem?id=2506
题解:f[n]=f[n-2]*2+f[n-1],主要是大数的相加;
以前做过了的
#include<stdio.h>
#include<string.h> int ans[][];//ans数组的第一个下标表示瓷砖数目,第二个表示对应下的方法数
//数组是倒序存储 的
int main()
{
int n, i, j, count, b, p;
while (scanf("%d", &n) != EOF)
{
memset(ans, , sizeof(ans));
ans[][] = ;
ans[][] = ;
ans[][] = ;
if (n <= )
printf("%d\n", ans[n][]);
else
{
count = ;//count表示对应的瓷砖数目下的方法数的位数
for (i = ; i <= n; i++)
{
b = ;
p = ;
for (j = ; j < count; j++)//从个位开始每一位相加
{
p = ans[i-][j]* + ans[i-][j]+b;
ans[i][j] = p % ;
b = p / ;
}
if (b)//如果大于等于10位数加1
{
ans[i][count] = b;
count ++;
}
}
for (i = count-; i >= ; i--)//逆序输出
{
printf("%d", ans[n][i]);
}
printf("\n");
}
}
return ;
}