(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 Input1 3 2 |
Sample Output1 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算法面試題:遞歸算法題2 第1個人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)