超基礎演算法 動態規劃

2021-10-09 20:12:31 字數 1559 閱讀 1628

動態規劃(dynamic programming,dp)是運籌學的乙個分支,是求解決策過程最優化的過程。20世紀50年代初,美國數學家貝爾曼(r.bellman)等人在研究多階段決策過程的優化問題時,提出了著名的最優化原理,從而創立了動態規劃。動態規劃的應用極其廣泛,包括工程技術、經濟、工業生產、軍事以及自動化控制等領域,並在揹包問題、生產經營問題、資金管理問題、資源分配問題、最短路徑問題和複雜系統可靠性問題等中取得了顯著的效果

動態規劃的本質其實是一種分治思想,即把原問題分解為若干子問題,先求解最小的子問題,並將結果儲存下來作為下乙個子問題的引數,依次計算,最後得出原問題的解。

最優子結構:最優子結構性質是指問題的最優解包含其子問題的最優解。最優子結構是使用動態規劃演算法的最基本條件,如果不具備最優子結構的性質,就不可以使用動態規劃演算法解決。

子問題重疊:子問題重疊是指在求解子問題的過程中,有大量的子問題是重複的,那麼只需要求解一次,然後把結果儲存在最優子結構中,以便使用時可以直接查詢,不需要再次求解。子問題重疊不是使用動態規劃的必要條件,但問題存在子問題重疊能夠充分彰顯動態規劃的優勢。

假設第1個月有1對剛誕生的兔子,第2個月進入成熟期,第3個月開始生育兔子,而1對成熟的兔子每月會生1對兔子,兔子永不死去……那麼,由1對初生兔子開始,12個月後會有多少對兔子呢?

我們不妨拿新出生的1對小兔子分析:

第1個月,小兔子①沒有繁殖能力,所以還是1對。

第2個月,小兔子①進入成熟期,仍然是1對。

第3個月,兔子①生了1對小兔子②,於是這個月共有2(1+1=2)對兔子。

第4個月,兔子①又生了1對小兔子③。因此共有3(1+2=3)對兔子。

第5個月,兔子①又生了1對小兔子④,而在第3個月出生的兔子②也生下了1對小兔子⑤。共有5(2+3=5)對兔子。

第6個月,兔子①②③各生下了1對小兔子。新生3對兔子加上原有的5對兔子這個月共有8(3+5=8)對兔子。

一:首先構造最優子結構

兔子分為三個階段:幼年期、成熟期、生育期。所以可以建立乙個資料結構專門用於表示三個階段的兔子的數量。

二:分析是否存在子問題重疊

本題中,每個月都會有生育期的兔子生小兔子、成熟期的兔子進入生育期、新生的兔子成為幼年期。所以,三種兔子的數量變化即這個問題的子問題。

一:最優子結構

//用於儲存兔子數量的資料結構

class rabbitsnum

@override

public string tostring()

}

二:重疊子問題解法

public class magicrabbits 

public static void main(string args) }}

計算結果:

動態規劃基礎

to find the fastest way through a factory.這個問題我簡述下 乙個產品的出場要經過多道工序的加工方可出場。某工廠有兩條工作線,每條工作線都具有n道工序。並且對應位置的工序執行相同的操作,但是他們具有不同的時間代價。在同一條工作線當中,由當前工序轉移到下一道工序...

動態規劃(基礎)

1 揹包 2 最長上公升子串行 3 線性dp 區間dp 4 記錄結果再利用的動態規劃 5 狀態壓縮dp 1 2 3 hdu dp題集 1 揹包問題 1 演算法 01 揹包問題,畫 2 挑戰程式設計競賽 3 揹包九講 4 揹包九講 自學筆記 1 完全揹包自學筆記 題目一覽表 考察知識點 完成時間 a ...

演算法 動態規劃

動態規劃 把多階段過程轉化為一系列單階段問題,利用各階段之間的關係,逐個求解 演算法例子 1.鋼條切割 serling 公司購買長鋼條,將其切割為短鋼條,切割工序假設沒有成本支出,公司管理層希望確定最佳的切割方案。假設serling公司 一段長度為i英吋的鋼條的 為pi。鋼條的長度為整英吋,下表給出...