動態規劃法

2022-06-28 05:06:12 字數 452 閱讀 8885

動態規劃(dynamic programming)

如果乙個問題是由交疊的子問題組成,就可以運用動態規劃法解決這個問題。

通過遞推由子問題推出問題的解。動態規劃法一般用於求解最優解問題。

最優化法則:問題的任一例項的最優解都是由其子例項的最優解構成的。

求解問題的關鍵:找出遞推關係,寫出遞推式

1 幣值最大化問題:一組硬幣排成一行,幣值無序,找出不相鄰的硬幣組成的最大幣值。

f(n) = max(f(n-1),f(n-2)+c(n)) //最大值要麼包含最後乙個,要麼不包含最後乙個。

f(0) = 0, f(1)= c(1)

2 找零問題:需要找零為n,最少需要多少面值為d1,d2,d3,...dm的硬幣。

f(n) = min(f(n-d1), f(n-d2),...f(n-dm)) + 1  //找出減乙個後的最小值。

f(0) = 0

動態規劃法

在學習動態規劃法之前,我們先來了解動態規劃的幾個概念 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...