運用動態規劃思想求解問題的一般思路。

2021-08-15 18:40:00 字數 579 閱讀 6455

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.將原問題分解成子問題 把原問題分解成...