1. 程式人生 > >運用動態規劃思想求解問題的一般思路。

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

1.將原問題分解為子問題

將原問題分解為若干個子問題,子問題和原問題形式相同或類似,只不過規模變小了。子問題都解決,原問題即解決。

子問題的解一旦求出就會被儲存,所以每個子問題只需求解一次。

2.確定狀態

在用動態規劃解題時,我們往往將和子問題相關的各個變數的一組取值,稱之為一個“狀態”。一個“狀態” 對應於一個或多個子問題,所謂某個“狀態”下的“值”,就是這個“狀態”,所對應的子問題的解。

3.確定一些初始狀態(邊界狀態)的值。

4.確定狀態轉移方程

定義出什麼是“狀態”, 以及在該“狀態” 下的“值”後,就要找出不同的狀態之間如何遷移–即如何從一個或多個“值” 已知“狀態”,求出另一個“狀態”的“值”。狀態的遷移可以用遞推公式表示,此遞推公式也可被稱作“狀態轉移方程”。

能用動規解決的問題的特點

(1) 問題具有最優子結構性質。
如果問題的最優解所包含的子問題的解也是最優的,我們就稱該問題具有最優子結構。

(2) 無後效性。當前的若干個狀態值一旦確定,則此後過程的演變就之和這若干個狀態的值有關,和之前是採取哪種縮短或經過哪條路徑演變到當前的著若干個狀態,沒有關係。