計蒜客第16題 爬樓梯

2021-07-04 03:03:21 字數 1149 閱讀 8387

假設你現在正在爬樓梯,樓梯有n級。每次你只能爬1級或者2級,那麼你有多少種方法爬到樓梯的頂部?

格式:

第一行輸入乙個數n(n<=50),代表樓梯的級數。

接下來一行輸出你的方法總數。

樣例1

輸入:

5 輸出:

8 很容易想到這道題可以用遞迴的方法:

分析:假設從底走到第n級的走法有f(n)種,走到第n級有兩個方法,乙個是從(n-1)級走一步,另乙個是從第(n-2)級走兩步,前者有f(n-1)種方法,後者有f(n-2)種方法,所以有f(n)=f(n-1)+f(n-2),還有f(0)=1,f(1)=1.

具體實現:

#include

using

namespace

std;

int f(int n)

int main()

可惜會超時。

改進的方法:動態規劃!

在遞迴思想的基礎下,我們知道存在子問題求解的重複性,運用動規,只需要將子問題求解一次,以後再遇到,直接呼叫,所以我們新建乙個陣列用於儲存子問題的結果:

將陣列元素初始為零,若為新的子問題,我們求解,並把結果賦給對應的陣列元素;這樣當我們再次遇到相同的子問題,就可以直接呼叫了。

具體的實現:

#include

using

namespace

std;

int result[100];

int f(int n)

int main()

一位朋友提供的方法:

原理:

#include

using namespace std;

struct matrix

};static matrix result(1, 0, 1, 0);

matrix operator* (matrix x, matrix y)

void mul(matrix base, int index)

}int main()

mul(base, n - 1);

cout << result.a + result.b << endl;

return

0;}

計蒜客 題庫 爬樓梯

題目 假設你現在正在爬樓梯,樓梯有 n級。每次你只能爬 1級或者 2級,那麼你有多少種方法爬到樓梯的頂部?第一行輸入乙個整數 n 1 n 50 代表樓梯的級數。輸出爬到樓梯頂部的方法總數。樣例輸入5 樣例輸出8 思路 每次只能爬1或者2級,也就是說可以從前n 1 n 2兩級任意一級到達n級,那麼到達...

蒜頭君爬樓梯(1) 計蒜客

目錄 題目 題解 蒜頭君很喜歡爬樓梯,但是蒜頭君腿不夠長,每次蒜頭君最多只能一步跨越兩個階梯。比如他初始在樓底,跨越乙個階梯到達 1號階梯,或者跨越兩個階梯到達 2號階梯。如下圖 為了選出一種最輕鬆的爬樓梯的方式,蒜頭君想把所有不同的到達樓頂的方式都嘗試一遍。對於一共有 n 個階梯的樓梯,蒜頭君一共...

蒜頭君爬樓梯(2) 計蒜客

目錄 題目 題解 1 號階梯,或者跨越 3個樓梯到達 3號階梯。如下圖 為了選出一種最輕鬆的爬樓梯的方式,蒜頭君想把所有不同的到達樓頂的方式都嘗試一遍。對於一共有 n 個階梯的樓梯,蒜頭君一共有多少總方法從樓底到達樓頂。由於最後答案可能很大,輸出最後的答案對 100007 取模的結果。輸入格式 第一...