您的位置:首页 > 其它

poj 2506 Tiling(递推 大数)

2013-07-29 20:16 375 查看
题目:http://poj.org/problem?id=2506

题解:f
=f[n-2]*2+f[n-1],主要是大数的相加;

以前做过了的

#include<stdio.h>
#include<string.h>

int ans[251][260];//ans数组的第一个下标表示瓷砖数目,第二个表示对应下的方法数
//数组是倒序存储 的
int main()
{
int n, i, j, count, b, p;
while (scanf("%d", &n) != EOF)
{
memset(ans, 0, sizeof(ans));
ans[0][0] = 1;
ans[1][0] = 1;
ans[2][0] = 3;
if (n <= 2)
printf("%d\n", ans
[0]);
else
{
count = 1;//count表示对应的瓷砖数目下的方法数的位数
for (i = 3; i <= n; i++)
{
b = 0;
p = 0;
for (j = 0; j < count; j++)//从个位开始每一位相加
{
p = ans[i-2][j]*2 + ans[i-1][j]+b;
ans[i][j] = p % 10;
b = p / 10;
}
if (b)//如果大于等于10位数加1
{
ans[i][count] = b;
count ++;
}
}
for (i = count-1; i >= 0; i--)//逆序输出
{
printf("%d", ans
[i]);
}
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: