3牌递归
2016-04-27 21:52
246 查看
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.<br>例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:<br><img src=../data/images/C40-1003-1.jpg>
Input
输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。<br>
Output
对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。<br>
Sample Input
1
3
2
Sample Output
1
3
2
依然是递归来解决的问题,先考虑1,2时的情况,分别有1种 2种情况,开始考虑第三种,因为是1*2的牌,从左边留出一个牌的空档,则右边就有两个牌的空档,一共有两种排法如图:
但本题的最大问题是输出数值过大容易超时。首先是预处理。由于数值过大,所以定义成64位整数。
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n;
__int64 a[51];//定义成64位整数
a[1] = 1;
a[2] = 2;
for(int i=3;i<=50;++i)//此处进行预处理
{
a[i] = a[i-1] + a[i-2];
}
//long long int m;
while(scanf("%d",&n)!=EOF)//直接寻址
{
printf("%I64d\n",a
);
//cout<<m<<endl;
}
}
Input
输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。<br>
Output
对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。<br>
Sample Input
1
3
2
Sample Output
1
3
2
依然是递归来解决的问题,先考虑1,2时的情况,分别有1种 2种情况,开始考虑第三种,因为是1*2的牌,从左边留出一个牌的空档,则右边就有两个牌的空档,一共有两种排法如图:
但本题的最大问题是输出数值过大容易超时。首先是预处理。由于数值过大,所以定义成64位整数。
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n;
__int64 a[51];//定义成64位整数
a[1] = 1;
a[2] = 2;
for(int i=3;i<=50;++i)//此处进行预处理
{
a[i] = a[i-1] + a[i-2];
}
//long long int m;
while(scanf("%d",&n)!=EOF)//直接寻址
{
printf("%I64d\n",a
);
//cout<<m<<endl;
}
}
相关文章推荐
- SecureCRT 使用技巧
- Flyway学习笔记
- POJ 3461 Oulipo【kmp】
- 字典序法全排列
- sqoop学习
- [C语言][LeetCode][119]Pascal's Triangle II
- 学习计划(这是个队列,什么时候队列会为空?,学完,就删除)
- 站立会议09
- C#使用xpath查找xml节点信息
- php获取mac用于网站绑定服务器
- Math.Round函数
- 指针 数组
- setInterval和setTimeout的使用
- 轮询器 android.os.Looper
- 使用ListView实现聊天界面
- linux设备树
- ThreadLocalMap源码分析
- leetcode-303. Range Sum Query - Immutable
- 自己学Docker:6.Docker的数据持久化之数据卷容器
- Object-c-----类方法