動態規劃解決的問題思路分析

一般三類問題需要動態規劃來處理
1、最大最小值
2、計數型,比如從A-B有多少種走法?但是不會把每週走法都羅列出來,很多時候我們會把羅列的個數的的題也當成動態規劃,其實不是。
3、存在型,比如是否可以?是否能勝利等?

動態規劃的4個步驟
舉個列子:面值爲2,5,7的硬幣,組裝27塊錢,最少需要多少枚?
第一步:確定狀態:什麼是狀態,簡單講就是要確定一個數組,數組的每個元素f[i]就是代表一個狀態,而且這個狀態的定義來源於整個問題劃分成子問題後的意思:比如最少用多少枚硬幣拼出x面值?那麼測試f[x]就表示最少多少枚拼出x面值。確定狀態需要依賴兩個條件:
1.1、最後一步:最後一步也就是最後一枚硬幣的面值:會有三種,2,5,7。三種情況f(27)=1+f(25) or f(27) = 1+f(22) or f(27) = 1+f(20)三種情況。而我們需要求的是最少的硬幣個數:所以f(27)=min{1+f(25), 1+f(22),1+f(20},三個中最小的那個。確定最後一步的目的就是要通過最後一步來推到除問題的子問題。
1.2、子問題:如:最少用多少枚硬幣拼出x面值

注意:其實動態規劃表達式都可以用遞歸的方式計算出來。但是重複計算很多消耗CPU。

第二步:根據狀態寫出轉移方程,意思就是寫出通用表達式: 比如這裏就是f(x)=min{f(x-2)+1,f(x-5)+1,f(x-7)+1};其實轉移方程寫出來,動態規劃題就解決了一半。

第三步:確定方程的初始化條件和邊界情況;初始條件一般都是0,1,2這樣的,比如f(0)=? f(1)=? f(2)=?等等。而且初始條件的方程一般不能套用方程公式來計算而要用手動根據實際情況來算。
第四步:確定f(x)的計算順序,是從大到小還是從小到達,這個取決於f(x)中x的依賴,比如x依賴與x-2,x-5,x-7所以只能先把小的算了才能算出大的x。因此是從小到大的順序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章