白話版 動態規劃法

2021-09-20 04:41:26 字數 1132 閱讀 1163

關於動態規劃法的解釋, 大多都是基於揹包問題的, 但揹包問題揹負了很多演算法的解釋工作,經常讓初學者混淆,剛剛刷leetcode的時候,發現了乙個很不錯的關於動態規劃演算法的例題,特來分享一下!

leetcode120

這是乙個典型的動態規劃問題:
動態規劃法的優勢在於, 前面n-1步保持了"很多"狀態, 當走出第n-1步的時候後, 可以基於儲存的狀態直接得出"很多新的"狀態, 然後從新狀態中得到最優解.

為了簡化問題, 對於上面的題目,我們可以從底向上走:

動態規劃法

class solution:

def minimumtotal(self, ********):

""":type ********: list[list[int]]

:rtype: int

"""for m in range(len(********)-1)[::-1]:

# m 為 主陣列索引

if (m == len(********)-1):

pass

# n 為當前元素索引

for n in range(len(********[m])):

********[m][n] = min(********[m][n]+********[m+1][n], ********[m][n]+********[m+1][n+1])

print("第",m,"行", "第",n,"個元素當前值為", ********[m][n])

return ********[0][0]

def main():

result = solution().minimumtotal([[2], [3, 4], [6, 5, 7], [4, 1, 8, 3]])

print("最短路徑為==>",result)

if __name__ == '__main__':

main()

動態規劃法結果

動態規劃與貪心法的區別:

動態規劃法

在學習動態規劃法之前,我們先來了解動態規劃的幾個概念 1 階段 把問題分成幾個相互聯絡的有順序的幾個環節,這些環節即稱為階段。2 狀態 某一階段的出發位置稱為狀態。3 決策 從某階段的乙個狀態演變到下乙個階段某狀態的選擇。4 狀態轉移方程 前一階段的終點就是後一階段的起點,前一階段的決策選擇匯出了後...

動態規劃法

有些問題在分解時會產生許多子問題,且分解出的自問題互相交織,因而在解這類問題時,將可能重複多次解乙個子問題。這種重複當然是不必要的,解決方法可以在解決每個子問題後把它的解 包括其子子問題的解 保留在乙個 中,若遇到求與之相同的子問題時,dp演算法又稱動態規劃,是資訊學競賽中選手必須熟練掌握的一種演算...

動態規劃法

最近遇到了一道挺有意思的演算法題 四種硬幣 1元3元4元5元 問 想要湊成n元錢最少幾枚硬幣?public class coinsgamemain fun 7,is public static void fun int k,int is i1 l min i2 if l k private stat...