骨牌铺方格
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方格,骨牌的铺放方案有三种,如下图:
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/396f212ed2d31ef1fd2e921eb1b248b2.jpeg)
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;
}