骨牌铺方格
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 28534 Accepted Submission(s): 13842
Problem Description
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
Input
输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。
Output
对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。
Sample Input
1 3 2
Sample Output
1 3 2
思路:就是简单递推,每增加一列,可以看成一下两种情况:
1.前n-1列加最后一列竖着摆
2.前n-2列加后两列横着摆
所以答案就是斐波那契数列!!
#include<stdio.h>
int main()
{
long long a[55];long long n;
a[0]=1;
a[1]=1;
a[2]=2;
for(int i=3;i<=50;i++)
{
a[i]=a[i-1]+a[i-2];
}
while(~scanf("%I64d",&n))
{
printf("%I64d\n",a[n]);
}
}
Sample Output
1 3 2
Tri Tiling
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2120 Accepted Submission(s): 1213
Problem Description
In how many ways can you tile a 3xn rectangle with 2x1 dominoes? Here is a sample tiling of a 3x12 rectangle.
Input
Input consists of several test cases followed by a line containing -1. Each test case is a line containing an integer 0 ≤ n ≤ 30.
Output
For each test case, output one integer number giving the number of possible tilings.
Sample Input
2 8 12 -1
Sample Output
3 153 2131
首先当n为奇数时显然无解的,输出0;
当n为偶数时,从小看:
n=2时有3种。每增加两列,可以看成一下情况:
1.这两列与之前不相连,单独摆放,有3种,即3*f(n-2);
2.这两列与之前两列中间相连,也就是说中线有横着摆放的(n-2和n-1列),有这种,还可以把底下两个横着的放到顶上,所以有两种情况,把后4列看作整体,即2*f(n-4);
而还有可能n-3与n-4列之间相连,即把后6列看作整体,也有两种,即2*f(n-6),递推之。
递推的终点是f(0)=1;f(2)=3;
代码还没写。
还有比较万能的方法叫状态压缩。
Sample Output
1 3 2