POJ2506:Tiling(递推+大数斐波那契)

http://poj.org/problem?id=2506

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int a[260][260];
int main()
{
    int n,i,j;
    memset(a,0,sizeof(a));
    a[0][0]=1;
    a[1][0]=1;
    a[2][0]=3;
    for (i=3; i<=250; i++)
    {
        for (j=0; j<=250; j++)
        {
            a[i][j]=a[i][j]+a[i-2][j]*2+a[i-1][j];
            if (a[i][j]>9)
            {
                a[i][j+1]=a[i][j]/10;
                a[i][j]=a[i][j]%10;
            }
        }
    }
    while(scanf("%d",&n)!=EOF)
    {
        int flag=0;
        for(i=250; i>=0; i--)
        {
            if(flag||a[n][i])
            {
                flag=1;
                printf("%d",a[n][i]);
            }
        }
        printf("\n");
    }
    return 0;
}
时间: 2024-12-16 07:45:57

POJ2506:Tiling(递推+大数斐波那契)的相关文章

【矩阵乘法】【快速幂】【递推】斐波那契数列&amp;&amp;矩乘优化递推模板

题目大意: F[0]=0 F[1]=1 F[n+2]=F[n+1]+F[n] 求F[n] mod 104. F[n+2] F[n+1] = 1 1 1 0 * F[n+1] F[n] 记这个矩阵为A,则有: F[n+1] F[n] = An * F[1] F[0] = An * 1 0 然后可以快速幂 #include<cstdio> #include<vector> using namespace std; typedef vector<int> vec; typed

HDOJ/HDU 1250 Hat&#39;s Fibonacci(大数~斐波拉契)

Problem Description A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1. F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n - 1) + F(n-2) + F(n-3) + F(n-4) Your task is to take

POJ 2506 Tiling (递推 + 大数加法模拟 )

Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7965   Accepted: 3866 Description In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? Here is a sample tiling of a 2x17 rectangle. Input Input is a sequence of lines,

大数斐波那契数列

和大数相加差不多就是开一个二维数组第一维记录第几个数第二维记录这一个数的位数 #include<stdio.h> #include<string.h> int a[1000][1000]; int main() { int n,m,i,k,c,l; scanf("%d",&n); while(n--) { scanf("%d",&m);l=1; a[1][0]=1;a[2][0]=1; for(i=3;i<=m;++i)

HDU1250大数+斐波那契数列

Description A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1. F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n - 1) + F(n-2) + F(n-3) + F(n-4) Your task is to take a number

斐波那契数列F(n)【n超大时的(矩阵加速运算) 模板】

hihocoder #1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘.对于这个棋盘,一共有多少种不同的覆盖方法呢? 举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式: 提示:骨牌覆盖 提示:如何快速计算结果 输入 第1行:1个整数N.表示棋盘长度.1≤N≤100,000,000 输出 第1行:1个整数,表示

【递归】斐波那契数列第n个数

递归.递推计算斐波那契数列第n项的值: 1 #include <stdio.h> 2 long long fact(int n); //[递推]计算波那契数列第n个数 3 long long fact2(int n);//[递归] 4 int main(int argc, char *argv[]) 5 { 6 int i=1; 7 while(i<=10) 8 { 9 printf("%d %I64d %I64d\n",i,fact(i),fact2(i)); 10

HDU 1848 斐波那契博弈

斐波那契数列数列博弈:给你三堆石子,每次只能取费波契数列个石子,问先手赢输出“Fibo”,否则输出“Nacci”. 主要求出SG函数,然后看 异或值 ,最后根据异或值是否是 0  #include <iostream> #include <cstdio> #include <cstring> using namespace std; int f[20]; int sg[1050], mex[1050]; int main() { int m,n,p; for(int i

斐波那契 递推算法

/***Date : 2014.12.10***/ //递推算法:是理性思维模式的代表,根据已有的数据和关系,逐步推导而得出结果. //执行过程:1)根据已知的结果和关系,求解中间结果. ///////////////////// 2)判断是否满足要求,若未满足,则继续根据已知结果和关系求解中间结果:若满足要求,则表示寻找到一个正确答案. //13世纪,意大利数学家斐波那契的<算盘书>中记载:兔子产仔问题. //一对两个月大的兔子,每月都可产仔一对,小兔子两月后的每月也可产仔一对;即1月生,3