现在的位置: 首页 > 综合 > 正文

HDU 2046 骨牌铺方格

2018年04月29日 ⁄ 综合 ⁄ 共 1060字 ⁄ 字号 评论关闭

骨牌铺方格

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 30444    Accepted Submission(s): 14753

Problem Description
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
 

Input
输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。
 

Output
对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。
 

Sample Input
1 3 2
 

Sample Output
1 3 2
 

Author
lcy
解题思路:
最近一直在做简单基础的递推类题目,感觉这类题目越做越有技巧,且规律越来越可循了,总之就是这个过程,
1.有题目意思推出来递推式。
2.打一张牛逼的表。
3.然后输入多少,查询多少就行了。
4.注意有的BT数据会爆int。
这道递推的题目和其他递推题目一样,有很强的规律性,要找到f(n)的状态是怎么样的,我们只需要从f(n-1)和f(n-2)两个状态着手就行了,
在上手的过程中,肯定会遇到不知道怎么来寻找关系的时候,这个时候不用着急,只需要做以下的几步操作就好了。
在由f(n-1)—-> f( n ) 过程中,都有什么量发生了变化,然后记录下来就可以。
在由f ( n-2 ) ----->f ( n ) 过程中,都有什么量发生了变化,然后记录下来。
再结合加法原理,让这两者相加就得到了f(n)的变化状态了。
你就这样通俗的想吧,f(n)是由f(n-1)和f(n-2)决定的,而f(n-1)有是由f(n-2)和f(n-3)决定的,,这样一步一步的递推到边界条件,然
后 边界条件一般由手算就可以很容易的得到,如果不会算的话,那也不要紧,一般题目给你的样例输入和输出就是在暗示你边界条件。。。。
代码:
# include<cstdio>
# include<iostream>

using namespace std;

# define MAX 60

__int64 a[MAX];

void dabiao()
{
    a[1] = 1;
    a[2] = 2;
    for ( int i = 3;i < MAX;i++ )
    {
        a[i] = a[i-2]+a[i-1];
    }
}

int main(void)
{
    dabiao();
    int n;
    while ( cin>>n )
    {
        cout<<a[n]<<endl;
    }


    return 0;
}

 

抱歉!评论已关闭.