暴力遞迴:
1, 把問題轉化為規模縮小了的同類問題的子問題
2, 有明確的不需要繼續進行遞迴的條件(base case)
3, 有當得到了子問題的結果之後的決策過程 4, 不記錄每乙個
子問題的解
動態規劃
1, 從暴力遞迴中來
2, 將每乙個子問題的解記錄下來, 避免重複計算
3, 把暴力遞迴的過程, 抽象成了狀態表達
4, 並且存在化簡狀態表達, 使其更加簡潔的可能
遞迴可以改成動態規劃的情況
遞迴中有很多重複狀態,且重複狀態的到達它的狀態無關(無後效性問題:在遞迴函式中可變引數確定了之後,返回值就確定的)
但是漢諾塔,n皇后問題是有後效性問題
利用遞迴改動態規劃套路:
1.確定dp表的大小(根據遞迴函式的可變引數確定dp表的維度,一維,二維,三維...)
2.在dp表中,首先將需要的位置標識出來
3.回到遞迴函式中,在base case中,把不被依賴的位置填好
4.然後分析普遍位置的依賴關係
看依賴的位置如 i, j 這個狀態需要依賴哪幾個狀態,如 i + 1, j 和 i, j+1這兩個狀態的關係,
然後通過這個依賴關係,利用3步中的不被依賴的狀態,倒推回去,得到2步中標識的位置
遞迴和動態規劃 整數和
給你乙個陣列arr,和乙個整數aim。如果可以任意選擇arr中的數字,能不能累加得到aim,返回true或者false 類似於字串的子串,陣列中的每個數字都可以在求和結果中,也可以不在 所以使用遞迴可以求得 public static boolean issum int arr,int aim pu...
動態規劃 遞迴
動態規劃是求解包含重疊子問題的最優化方法 1.基本思想 將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解 注意 不是簡單分而治之 2.只能應用於有最優子結構的問題 即區域性最優解能決定全域性最優解,或問題能分解成子問題來求解 3.具有無後效性。它要求每乙個問題的決策,不能夠對解...
遞迴和動態規劃(一)
題目 給定陣列arr,arr中所有的值都為正數且不重複。每個值代表一種面值貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim代表要找的錢數,求換錢有多少種方法。解題思路 解法一 暴力遞迴 如果arr 5,10,25,1 aim 1000,過程如下 1.用0張5元的貨幣,讓 10,25,1 組成...