(hdu step 3.1.2)骨牌铺方格(简单递推:求用2*1的骨牌铺满2*n的网格的方案数)

在写题解之前给自己打一下广告哈~。。抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下:

http://edu.csdn.net/course/detail/209

题目:

骨牌铺方格

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

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


Source

递推求解专题练习(For Beginner)


Recommend

lcy

题目分析:

简单递推。假设dp[i]为铺满2*n网格的方案数.那么dp[i]=dp[i-1]+dp[i-2]。其中dp[i-1]为铺满2*(n-1)网格的方案数(既然前面的2*(n-1)的网格一已经铺满,那么最后一个只能是竖着放)。dp[i-2]为铺满2*(n-2)网格的方案数(如果前面的2*(n-2)的网格已经铺满,那么最后的只能是横着放,否则会重复).其实这种递推题,在独立思考得到递推公式后,其实可以将输入样例带进去验证一下.需要注意的是dp[50]已经到200多亿了,这时候需要用long long 。

代码如下:

/*
 * b.cpp
 *
 *  Created on: 2015年2月5日
 *      Author: Administrator
 */

#include <iostream>
#include <cstdio>

using namespace std;

const int maxn = 52;

long long dp[maxn];

void prepare(){
	dp[1] = 1;
	dp[2] = 2;

	int i;
	for(i = 3 ; i < maxn ; ++i){
		dp[i] = dp[i-1] + dp[i-2];
	}
}

int main(){
	prepare();
	int n;
	while(scanf("%d",&n)!=EOF){
		printf("%lld\n",dp[n]);
	}

	return 0;
}
时间: 2024-08-04 17:18:09

(hdu step 3.1.2)骨牌铺方格(简单递推:求用2*1的骨牌铺满2*n的网格的方案数)的相关文章

HDU 2046 骨牌铺方格(简单递推)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=2046 骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 36089    Accepted Submission(s): 17535 Problem Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输

(hdu step 3.1.3)母牛的故事(简单递推)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 659 Accepted Submission(s): 481   Problem Descriptio

(hdu step 3.1.5)Tiling_easy version(求用2*1、2*2两种骨格铺满2*n的网格的方案数)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: Tiling_easy version Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 515 Accepted Submission(s): 447   Prob

hihoCoder 1143 : 骨牌覆盖问题&#183;一(递推,矩阵快速幂)

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

hdu 1165 Eddy&amp;#39;s research II(数学题,递推)

// Eddy 继续 Problem Description As is known, Ackermann function plays an important role in the sphere of theoretical computer science. However, in the other hand, the dramatic fast increasing pace of the function caused the value of Ackermann function

(hdu step 6.3.3)Air Raid(最小路径覆盖:求用最少边把全部的顶点都覆盖)

题目: Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 124 Accepted Submission(s): 102   Problem Description Consider a town where all the streets are one-way and each street leads from one

(hdu step 6.3.3)Air Raid(最小路径覆盖:求用最少边把所有的顶点都覆盖)

题目: Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 124 Accepted Submission(s): 102   Problem Description Consider a town where all the streets are one-way and each street leads from one

(hdu step 3.1.1)超级楼梯(简单递推:从第1级到第m级有多少种走法,每次只能走一步或两步)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 超级楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 652 Accepted Submission(s): 483   Problem Description

(hdu step 2.1.1)最小公倍数(使用最大公约数来辅助求最小公倍数)

题目: 最小公倍数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3609 Accepted Submission(s): 2596   Problem Description 给定两个正整数,计算这两个数的最小公倍数. Input 输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数. Output 对于每个测试用例,给出这