什麼是動態規劃?
動態規劃(dynamic爬樓梯題目描述programming,dp)是運籌學的乙個分支,是求解決策過程最優化的過程。20世紀50年代初,美國數學家貝爾曼(r.bellman)等人在研究多階段決策過程的優化問題時,提出了著名的最優化原理,從而創立了動態規劃。動態規劃的應用極其廣泛,包括工程技術、經濟、工業生產、軍事以及自動化控制等領域,並在揹包問題、生產經營問題、資金管理問題、資源分配問題、最短路徑問題和複雜系統可靠性問題等中取得了顯著的效果
假設你正在爬樓梯。需要 n 階你才能到達樓頂。分析:每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是乙個正整數。
示例 1:
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
1 階 + 1 階
2 階
示例 2:
輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。
1 階 + 1 階 + 1 階
1 階 + 2 階
2 階 + 1 階
假設樓梯有5階,
當第一步走一階時:
剩下的樓梯還有四階,那麼剩下的四階有幾種走法?
當一步走兩階時,
剩下的樓梯有三階,那麼剩下的三階有幾種走法?
問題的規模隨著拆分,會變得越來越小,這種將問題拆解,並通過計算小問題的解,最終計算出最優解的思想就是動態規劃。
假設走完x階樓梯有f(x)種走法,那麼根據上面的分析一共有這麼多的方法可以走完整個樓梯:
f(x) = f(x-1) + f(x-2);
當然我們要確定一下邊界值:
當我們走1階的時候:
dp[1] =1 ;
因為陣列的下標存在0,所以dp[0] =1
上面的通式用js實現:
let
allmethods
=function
(n)return dp[n]
}
此演算法的時間複雜度為o(n),空間複雜度為:o(n)。
那麼按照上述思想去求解斐波那契數列:
斐波那契數列:
斐波那契數列指的是這樣乙個數列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368…
這個數列從第3項開始,每一項都等於前兩項之和。
function
dynfib
(n)if
(n ===
1|| n ===2)
else
}return fib[n-1]
}
利用動態規劃求解,是面對複雜問題的一種解決思路。 動態規劃(斐波那契系列) 爬樓梯
遞迴和動態規劃都是將原問題拆成多個子問題然後求解,他們之間最本質的區別是,動態規劃保留了子問題的解,避免了重複計算。70.climbing stairs easy 題目描述 有 n 階樓梯,每次可以上一階或者兩階,求有多少種上樓梯的方法。思路分析 定義乙個dp陣列儲存上樓梯的方法數,dp i 表示走...
斐波那契 70 爬樓梯
假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2輸出 2解釋 有兩種方法可以爬到樓頂。1.1 階 1階 2.2 階 示例 2 輸入 3輸出 3解釋 有三種方法可以爬到樓頂。1.1 階 ...
Leetcode練習 十六 爬樓梯與斐波那契數列
you are climbing a stair case.it takes n steps to reach to the top.each time you can either climb 1 or 2 steps.in how many distinct ways can you climb...