1. 程式人生 > >動態規劃的理解和例子集合

動態規劃的理解和例子集合

理解動態規劃。

它的基本思想是,大事化小,小事化了。

把大的事件一步步分解成小的事件,再把邊界值求出來,就可以通過遞推來求出任何一個狀態了。

首先要想到的最重要的幾點是:1.子問題重疊。2.區域性最優就是整體最優。3.先前的決策不影響後續的決策。

第一個例子:小明上臺階

這個問題沒涉及到區域性最優就是整體最優。

那,問題很簡單,小明可以一次上1個臺階也可以一次上2個臺階,問,他上到n個臺階有多少種走法。

ps:當然這問題你用dfs搜尋也沒問題,就是效率不高。正著搜倒著搜都可以。記憶化不記憶化都可以。

賊多啊,問題太大了。化小。

上到第n個臺階一定是由上一步再上1個臺階或者上一步再上2個臺階的結果。

設函式f是走到第n個臺階的步數,那麼,把上面的那句話翻譯過來就是:

f(n)=f(n-1)+f(n-2)

這個式子就表明了狀態的轉移方程,維度只有1個引數。

那麼,現在找邊界就可以了。f(1)=1,f(2)=3.

這樣任何f(n)通過遞推就可以算出來了。

我們之所以能把f(n)化成f(n-1)和f(n-2)並且能一直化下去,就是因為他的子問題重疊。