python學習動態規劃

2021-10-01 02:08:01 字數 531 閱讀 5132

今天花了幾個小時,重新理解了一下dp。。。

首先我們要知道為什麼要使用dp,我們在選擇dp演算法的時候,往往是在決策問題上,而且是在如果不使用dp,直接暴力效率會很低的情況下選擇使用dp.

那麼問題來了,什麼時候會選擇使用dp呢,一般情況下,我們能將問題抽象出來,並且問題滿足無後效性,滿足最優子結構,並且能明確的找出狀態轉移方程的話,

dp無疑是很好的選擇。

無後效性是什麼呢,無後效性通俗的說就是只要我們得出了當前狀態,而不用管這個狀態怎麼來的,也就是說之前的狀態已經用不著了,如果我們抽象出的狀態有後效性,很簡單,我們只用把這個值加入到狀態的表示中。

最優子結構:在決策問題中,如果,當前問題可以拆分為多個子問題,並且依賴於這些子問題,那麼我們稱為此問題符合子結構,而若當前狀態可以由某個階段的某個或某些

狀態直接得到,那麼就符合最優子結構

狀態轉移:這個概念比較簡單,在抽象出上述兩點的的狀態表示後,每種狀態之間轉移時值或者引數的變化。

接下來就是大量的訓練來達到熟練使用了

關於python的動態規劃詳細解釋和案例

python動態規劃

思路 把每次的結果放在字典裡 from functools import wraps defmemo func cache wraps func defwrap args if args not in cache cache args func args return cache args retu...

動態規劃python

問題描述 最長遞迴子串行即給定乙個序列,求解其中最長的遞增的子串行的長度 注意 在求解過程中,長度為n的遞增子串行可能不止乙個,但是在所有長度為n的子串行中,有乙個子串行是比較特殊的,那就是最大元素最小的遞增子序 def getdp1 arr n len arr dp 0 nfor i in ran...

動態規劃學習

首先是01揹包問題,可以把它看做是乙個 行和列分別是體積從1,2,v,每個物品的花費c1,c2,cn,每個空格裡的數代表放入第i個物品在體積為j的揹包裡的最大價值。dp j 表示體積為j的揹包,放入物品後,可以得到的最大值。狀態轉移方程為if j c i dp j max dp j dp j c i...