1.將原問題分解為子問題
將原問題分解為若干個子問題,子問題和原問題形式相同或類似,只不過規模變小了。子問題都解決,原問題即解決。
子問題的解一旦求出就會被儲存,所以每個子問題只需求解一次。
、 2.確定狀態
在用動態規劃解題時,我們往往將和子問題相關的各個變數的一組取值,稱之為乙個「狀態」。乙個「狀態」 對應於乙個或多個子問題,所謂某個「狀態」下的「值」,就是這個「狀態」,所對應的子問題的解。
3.確定一些初始狀態(邊界狀態)的值。
4.確定狀態轉移方程
定義出什麼是「狀態」, 以及在該「狀態」 下的「值」後,就要找出不同的狀態之間如何遷移–即如何從乙個或多個「值」 已知「狀態」,求出另乙個「狀態」的「值」。狀態的遷移可以用遞推公式表示,此遞推公式也可被稱作「狀態轉移方程」。
能用動規解決的問題的特點
(1) 問題具有最優子結構性質。
如果問題的最優解所包含的子問題的解也是最優的,我們就稱該問題具有最優子結構。
(2) 無後效性。當前的若干個狀態值一旦確定,則此後過程的演變就之和這若干個狀態的值有關,和之前是採取哪種縮短或經過哪條路徑演變到當前的著若干個狀態,沒有關係。
一般問題求解過程
當遇到問題時,就要思考如何來解決這些問題,以下就是解決問題的一般過程 分析問題 從多方位 多角度分析問題,例如,根本原因 直接原因。設計方案 每乙個方案的利弊都應該不一樣,多設計幾個方案也是以備不時之需。方案選擇 從中挑選出最合理的方案,備選方案可以在執行方案之時有機結合。解決步驟 方案確定好了之後...
動態規劃的一般描述
一,粗獷的動態規劃演算法 st加入list for z 1 to n 推進n次,n為dag頂點數 else 二,帶open標記的動態規劃演算法 st.open true st加入list for z 1 to n 推進n次,n為dag頂點數 else open標記的作用是 如果乙個點作過推進了,那麼...
動態規劃解題一般思路
摘自mooc的程式設計與演算法 一.遞迴到動規的轉換方法 遞迴函式有n個引數,就定義乙個n維的陣列,陣列的下標就是遞迴函式引數的取值範圍,陣列元素的值就是遞迴的返回值,這樣就可以從邊界值開始逐步填充陣列,相當於計算遞迴函式值的逆過程 二.動態規劃解題一般思路 1.將原問題分解成子問題 把原問題分解成...