1. 程式人生 > >(hdu step 3.1.2)骨牌鋪方格(簡單遞推:求用2*1的骨牌鋪滿2*n的網格的方案數)

(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
Authorlcy
Source遞推求解專題練習(For Beginner)
Recommendlcy

題目分析:

            簡單遞推。假設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;
}



相關推薦

(hdu step 3.1.2)骨牌方格(簡單2*1骨牌滿2*n網格方案)

在寫題解之前給自己打一下廣告哈~。。抱歉了,希望大家多多支援我在CSDN的視訊課程,地址如下:http://edu.csdn.net/course/detail/209題目:骨牌鋪方格Time Limi

HDU 2046 骨牌方格(簡單

連結:http://acm.hdu.edu.cn/showproblem.php?pid=2046 骨牌鋪方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe

hdu 2046 骨牌方格 斐波那契數列)

骨牌鋪方格 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To

HDU 2046 骨牌方格

題目:HDU-2046 骨牌鋪方格 題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2046 題目: 骨牌鋪方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit:

HDU 2046 骨牌方格

骨牌鋪方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28606    Accepted Submissi

HDOJ-2046 骨牌方格

題目:HDOJ-2046 題目描述:在2×n的一個長方形方格中,用一個1× 2的骨牌鋪滿方格,輸入n ,輸出鋪放方案的總數. 例如n=3時,為2× 3方格,骨牌的鋪放方案有三種,如下圖: 思路:(遞推) 對n位置情況進行討論 ①n位置1個骨牌豎著放,對前n-1無影響,所以等於f(n

HDU2046 骨牌方格

骨牌鋪方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 56741    Accepted Submiss

hdoj 2046 骨牌方格

        在2×n的一個長方形方格中,用一個1× 2的骨牌鋪滿方格,輸入n ,輸出鋪放方案的總數. 思路:  兩種情況:              情況 1: 在長方形方格末尾豎著放一個牌, 就轉化為2*(n-1)的問題;               情況2 : 在長

hdoj 2046 骨牌方格

在2×n的一個長方形方格中,用一個1× 2的骨牌鋪滿方格,輸入n ,輸出鋪放方案的總數. 思路: 兩種情況: 情況 1: 在長方形方格末尾豎著放一個牌, 就轉化為2*(n-1)的問題; 情況2 : 在長方形方格末尾橫

hdu step 3 1 1 超級樓梯 簡單 從第1級到第m級有多少種走法 每次只能走一步或兩步

                在寫題解之前給自己打一下廣告哈~。。抱歉了,希望大家多多支援我在CSDN的視訊課程,地址如下:http://edu.csdn.net/course/detail/209題目:超級樓梯Time Limit: 2000/1000 MS (Java/Others) Memory Li

java算法面試題歸算法題21個人10,第2個比第1個人大2歲,依次,請歸方式計算出第8個人多大?

else oid 算法題 body println 算法 ring swift java算法 package com.swift; public class Digui_Return { public static void main(String[] arg

中間件一個1分鐘訪問不能超過3

elf pro print n) {} ins ros pan tor #導入模塊from django.utils.deprecation import MiddlewareMixin # 定義一個 訪問記錄的大字典 VISIT_RECORD = {} # 自定義

HDU 6198 2017沈陽網絡賽 線形

一個 解法 scanf print include def sca () 鏈接 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6198 題意:給出一個數k,問用k個斐波那契數相加,得不到的數最小是幾。 解法:先暴力打表看看有沒

Codeforces Round #455 (Div. 2) C. Python Indentation dp

air 方式 gpo pac sin -s font its 多少 Codeforces Round #455 (Div. 2) C. Python Indentation 題意:python 裏面,給出 n 個 for 循環或陳述語句,‘f‘ 裏面必須要有語句。按 p

hdu-2045 簡單

方塊 span col 方案 ace std name hdu return 題意:   一行長度為n的方格,只能使用三種顏色R、P、G來填充,且滿足相鄰方塊不能同色,首尾方塊不能同色。給出n,輸出滿足條件的著色方案數。 思路:   簡單遞推,由n-1個方塊推導出n個

Bookshelf 2(poj3628,01揹包,dp) 對01揹包的分析與理解(圖文)

題目連結:Bookshelf 2(點選進入) 題目解讀: 給n頭牛,給出每個牛的高度h[i],給出一個書架的高度b(所有牛的高度相加>書架高度b),現在把一些牛疊起來(每頭牛隻能用一次,但不同的牛可能身高相同),在這些疊起來的牛的總高度>書架b的基礎上,找出最小的差距(由於輸入的資料會保證所有

HDU 1438  鑰匙計數之一 (狀態壓縮或

HDU 1438  鑰匙計數之一   Problem Description 一把鎖匙有N個槽,槽深為1,2,3,4。每鎖匙至少有3個不同的深度且至少有1對相連的槽其深度之差為3。求這樣的鎖匙的總數。 Input 本題無輸入 Output 對N&g

HDU-5363 Key Set 【快速冪取模+

Key Set Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I64u Submit Status Description soda has a

程式設計之美二進位制中1的個數

1.問題描述 實現一個函式,輸入一個無符號整數,輸出該數二進位制中的1的個數。例如把9表示成二進位制是1001,有2位是1,因此如果輸入9,該函式輸出2 2.分析與解法 解法1:利用十進位制和二進位制相互轉化的規則,依次除餘操作的結果是否為1  程式碼如下: int Count1(unsigned

hdu 2050 第一場基礎演算法 折線分平面

題目連結hdu2050 程式碼如下: #include<cstdio> #include<algorithm> #include<iostream> using namespace std; int coun(int n) { if(n==1)