演算法訓練 瓷磚鋪放 遞迴
問題描述
有一長度為N(1<=N<=10)的地板,給定兩種不同瓷磚:一種長度為1,另一種長度為2,數目不限。要將這個長度為N的地板鋪滿,一共有多少種不同的鋪法?
例如,長度為4的地面一共有如下5種鋪法:
4=1+1+1+1
4=2+1+1
4=1+2+1
4=1+1+2
4=2+2
程式設計用遞迴的方法求解上述問題。
輸入格式
只有一個數N,代表地板的長度
輸出格式
輸出一個數,代表所有不同的瓷磚鋪放方法的總數
樣例輸入
4
樣例輸出
5
#include<iostream> using namespace std; int n; int ans=0; void dfs(int m) { if(m<0)return; if(m==0) { ans++; return; } dfs(m-1); dfs(m-2); } int main() { cin>>n; dfs(n); cout<<ans; }
相關推薦
演算法訓練 瓷磚鋪放 遞迴
問題描述 有一長度為N(1<=N<=10)的地板,給定兩種不同瓷磚:一種長度為1,另一種長度為2,數目不限。要將這個長度為N的地板鋪滿,一共有多少種不同的鋪法? 例如,長度為4的地面一共有如下5種鋪法: 4=1+1+1+1 4=2+1+1
藍橋杯 ALGO-11演算法訓練 瓷磚鋪放(遞迴/動態規劃)
問題描述 有一長度為N(1<=N<=10)的地板,給定兩種不同瓷磚:一種長度為1,另一種長度為2,數目不限。要將這個長度為N的地板鋪滿,一共有多少種不同的鋪法? 例如,長度為4的地面
演算法訓練 瓷磚鋪放
問題描述 有一長度為N(1<=N<=10)的地板,給定兩種不同瓷磚:一種長度為1,另一種長度為2,數目不限。要將這個長度為N的地板鋪滿,一共有多少種不同的鋪法? 例如,長度為4的地面一共有如下5種鋪法: 4=1+1+1+1 4
C/C++ 演算法分析與設計:遞迴(放蘋果)
題目描述 把M個同樣的蘋果放在N個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用K表示)5,1,1和1,5,1 是同一種分法。 輸入 第一行是測試資料的數目t(0 <= t <= 20)。以下每行均包含二個整數M和N,以空格分開。1<
演算法之 迭代和遞迴
在計算機程式設計實現中有常常兩種方法: 一為迭代(iterate);二為遞迴(recursion)。 一、概念區分 迭代:利用已知的變數值,根據遞推公式不斷演進得到變數新值得程式設計思想。 遞迴:是指程式呼叫自身的程式設計思想,即一個函式呼叫本身 如果遞迴是自己呼叫
JS演算法 重建二叉樹 遞迴演算法
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 / * function TreeNo
基礎演算法之排序雜湊遞迴
基礎演算法學習筆記(一) 一. 選擇排序 1.選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直
8皇后以及N皇后演算法探究,回溯演算法的JAVA實現,遞迴方案(一)
八皇后問題,是一個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於1848年提出:在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。1854年在柏林的象棋雜誌
《演算法筆記》——hdu2041 簡單遞迴
題解:由題目可知,每次只能走一級或兩級。 因此從第一級走上第二級只能走一步,只有1種走法。 從第一級走上第三級,可以從第一級直接走兩步,也可以從第二級走一步。有2種走法走上第n級,可以從第n-1級走一步上來,也可以從第n-2級走兩步上來。即: f(2) = 1 f(3) =
8皇后以及N皇后演算法探究,回溯演算法的JAVASCRIPT實現,遞迴方案
java原文參考這位大神,他的部落格中有關於N皇后問題的極限演算法 我只是搬運翻譯的js實現 console.log使用node.js到時候替換即可。 //定義陣列克隆方法 Array.prototype.clone = function(){ var a=
計算機演算法設計與分析之遞迴與分治策略——二分搜尋技術
遞迴與分治策略 二分搜尋技術 我們所熟知的二分搜尋演算法是運用分治策略的典型例子,針對這個演算法,先給出一個簡單的案例。 目的:給定已排好序的n個元素a[0:n-1],現要在這n個元素中找出一特定的元素x。 我們首先想到的最簡單的是用順序搜尋方法,逐個比較a[0:n-1]中元素,直至找出元
藍橋杯 演算法訓練 ALGO-128 Cowboys 遞推、動態規劃
演算法訓練 Cowboys 時間限制:2.0s 記憶體限制:256.0MB 提交此題 問題描述 一個間不容髮的時刻:n個牛仔站立於一個環中,並且每個牛仔都用左輪手槍指著他旁邊的人!每個牛仔指著他順時針或者逆時針方向上的相鄰的人。正如很多西部片那樣,在這一刻,繩命是入刺的不可惜……
java演算法例項_排序&&查詢&&遞迴
目錄: 一、常見的排序 1、簡單的桶排序 2、氣泡排序 3、選擇排序 4、 插入排序 5、希爾排序 6、快速排序 7、堆排序 二、二分查詢和折半插入 1、二分查詢 2、折半插入 三
java查詢演算法(二)--二分遞迴查詢
二分查詢的前提是陣列必須是已經排好序的,才能對中位數進行比較後選擇在哪邊查詢。 //遞迴查詢(recursion): // 二分查詢的前提是陣列必須是已經排好序的,才能對中位數進行比較後選擇在哪邊
演算法設計與分析-遞迴演算法總結
一、遞迴的思想和定義 (一)、孫子兵法道:凡治眾如治寡,分數是也。在使用計算機解決問題時我們經常遇到的問題是規模較大的問題,不能直接求解,最普遍的方法就是分解問題。遞迴就是一種特殊的分治思想,在解決一個規模為n的大問題時,先將這個大問題分解為規模為k的與原問題在形式上相同
演算法設計與分析之遞迴與分治策略
分治法: 將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。 (1)可行性:如果原問題可分割成k個子問題(1<k<=n),且這些子問題都可解,並可利用這些子問題的解求出原問題的解,那麼分治法就是可行的。 (2)分治法與
[演算法]簡單的揹包問題遞迴解法,C語言實現
今天講點簡單的演算法,最簡單的揹包0演算法,使用了遞迴的方法,相信看完程式碼的朋友會發現這段程式碼很熟悉,不過CG提供這些程式碼的目的只是讓全部揹包演算法的完整提供地給大家,程式碼很簡單,相信高手一看就懂,這裡的揹包演算法只是考慮了物品的重量,沒有考慮物品的價值,是初學遞迴演算法的朋友必看的程式碼,高手的話全
求子集問題演算法分析與實現(遞迴、非遞迴)
問題描述: 若有數字集合{1,2,3},則其子集為NULL、{1}、{2}、{3}、{1,2}、{1,3}、{2,3}、{1,2,3}。現給定陣列,求其的全部子集。 實現如下: //非
Java(二分查詢演算法實現,分別使用遞迴和非遞迴方式)
public class BinarySearch { private int[] array; private int index; private int min; private int max; public BinarySearch(int[]
【演算法】迭代和遞迴
在日常程式的編寫中,複雜的專案日益增多,在後期的程式碼優化上需要花更多的時間和精力。在前期的規劃上也越來越重要,前期良好的規劃可以避免後期遇到些奇怪的問題。 這次部落格我希望通過講解下迭代和遞迴的具體應用場景,來表達寫程式是前期規劃的作用和解決具體問題所需要的方法。