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

2021-08-30 17:59:11 字數 588 閱讀 9233

理解動態規劃。

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

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

首先要想到的最重要的幾點是: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)並且能一直化下去,就是因為他的子問題重疊。

能劃分兩子集合,每個集合的和相等

對於從1到n的連續整數集合,能劃分成兩個子集合,且保證每個集合的數字和是相等的。舉個例子,如果n 3,對於能劃分成兩個子集合,他們每個的所有數字和是相等的 and 這是唯一一種分法 交換集合位置被認為是同一種劃分方案,因此不會增加劃分方案總數 如果n 7,有四種方法能劃分集合,每一種分發的子集合各數...

Iterator遍歷有多級子集合的集合

文章的題目可能有點繞,舉乙個例子吧,我們想將乙個公司的所有員工的姓名列印出來,這個公司的員工分為不同的層級,有公司直接領導的高階員工,也有員工是在公司的 乙個子部門工作,還有的員工可能在乙個公司的子部門的子部門地下工作 乙個部門可能有直接領導的員工,也可能有多個子部門 這個公司的層級結構可能達到7 ...

如何得到某集合的所有子集合

我們都知道,乙個含n個元素的集合擁有2 n個子集合,並且不難發現,其中每個子集合都是從0到2 n 1 每個數的二進位制格式中0 放棄,1選擇的結果,如下所示 000 100010 110001 101011 111所以根據數字的二進位制轉換,可以輕鬆獲得乙個集合的所有子集合,如下 sub getal...