1504071639-hd-Tiling_easy version



Tiling_easy version

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 5910    Accepted Submission(s): 4646

Problem Description

有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。

Input

输入的第一行包含一个正整数T(T<=20),表示一共有 T组数据,接着是T行数据,每行包含一个正整数N(N<=30),表示网格的大小是2行N列。

Output

输出一共有多少种铺设的方法,每组数据的输出占一行。

Sample Input

3
2
8
12

Sample Output

3
171
2731

解题思路

对于这种数学题,大多会存在一个公式来求出答案。

好吧,原谅我小白,没想出来公式,参考网上大神的代码才发现这个公式,像大神致敬。

代码

#include<iostream>
int num[32];
using namespace std;
int main()
{
	int n;
	int m;
	int i,j,k;
	int sum;
	num[1]=1;
	num[2]=3;
	for(i=3;i<=30;i++)
	    num[i]=num[i-1]+2*num[i-2];
	cin>>n;
	while(n--)
	{
		cin>>m;
		cout<<num[m]<<endl;
	}
	return 0;
}
时间: 2024-11-02 07:37:58

1504071639-hd-Tiling_easy version的相关文章

hdu 2501 Tiling_easy version 递推

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2501 题目分析:已知有2*1,2*2,两种型号的瓷砖,要求铺满2*n的格子有多少种方法.可以考虑最左边一列的铺法,竖着铺的话,右边为f(n-1),只有一种铺法:横着铺的话,可以用一块2*2或者两块2*1的横铺, 右边为f(n-2), 有两种. 故递推公式为:f(n) = f(n-1) + 2*f(n-2) /*Tiling_easy version Time Limit: 1000/1000 MS

HDU - 2501 - Tiling_easy version (简单递推关系!!)

Tiling_easy version Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5516    Accepted Submission(s): 4347 Problem Description 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法

(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

Tiling_easy version(填2 x N的格子的种类)

E - Tiling_easy version 题目大意: 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法. 一个简单的dp问题: dp[i+2]=dp[i+1]+2*dp[i]; 初始条件:dp[1]=1;dp[2]=3; 一开始没考虑清楚,把递推关系写成dp[i+2]=3*dp[i]; 解释一下dp[i+2]=dp[i+1]+2*dp[i] dp[i+2]相对于dp[i]正好多一个2x2的正方形,当前

Tiling_easy version

Tiling_easy version 思路:关于dp这种东西,有一点必须要想明白,就是状态与状态之间的转换关系,就比如说要求5个骨牌的方案数,因为有两种骨牌,那么可以用dp[3]+两个横着的骨牌或者一个2*2的骨牌,或者是dp[4]+一个竖着的1*2骨牌来构成,那么递推的公式就是dp[5]=dp[3]*2+dp[4] 代码: // Created by CAD on 2019/10/10. #include <bits/stdc++.h> using namespace std; int d

Hdoj 2501.Tiling_easy version 题解

Problem Description 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法. Input 输入的第一行包含一个正整数T(T<=20),表示一共有 T组数据,接着是T行数据,每行包含一个正整数N(N<=30),表示网格的大小是2行N列. Output 输出一共有多少种铺设的方法,每组数据的输出占一行. Sample Input 3 2 8 12 Sample Output 3 171 2731

JDK1.8源码学习之 HashMap.java

///JDK1.8源码学习之HashMap.java package java.util; import java.io.IOException; import java.io.InvalidObjectException; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.function.BiConsu

Hbase创建表插入查询数据案例

package org.test; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.NavigableMap; import ja

HashMap 源码分析

package java.util; import java.io.IOException;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.function.BiConsumer;import java.util.function.BiFunction;import java.util.function.Con