9.3 - 高算5

講了動態規劃:
一道題如何判斷用動態規劃來解,并且如何解,一共有以下幾個要素:
動態規劃一般可以回答以下三個問題:
a) 最優解/Maximum/Minimum
b) Yes/No
c) Count(*) 2. ?方程 Function
然后在構造動態規劃的解答的時候,主要分為下面四個步驟

  1. 狀態 State
    靈感,創造?力,存儲?小規模問題的結果
  2. 狀態之間的聯系,怎么通過?小的狀態,來求得?大的狀態
  3. 初始化 Intialization:最極限的?小狀態是什么, 起點
  4. 答案 Answer: 最?大的那個狀態是什么,終點

以上是基礎算法班的知識,這節課主要講的是記憶化滾動數組優化和記憶化搜索。

滾動數組優化主要是如果遞推公式里,i的值只和有限個前值相關,就可以優化,比如i只和i-1,i-2相關,那么只要開一個長度為2的數組循環利用就可以了。

記憶化搜索的主要用處是1. 當DP的i不是只和前面的值有關的情況,比如說有可能是矩陣類型的搜索需要搜索四個方向,2.game的問題,兩個玩家你拿一個我拿一個這種用記憶化搜索比較容易一些

題目:
1. Longest Increasing Continuous Subsequence: 因為是連續的,所以后一個值只和前一個值有關系,所以可以用滾動數組優化

2. Maximum Subarray: 利用前綴和數組

3. Maximal Square: 利用以某一個坐標為右下角的點,看看能不能形成正方形,并且記錄其邊長

4. Longest Palindromic Substring: 這題我從來都沒用動態規劃來解決過,直接loop

5. Coins in a Line: 記憶化搜索中的game問題,只考慮當前自己能夠獲得的值

6. Coins in a Line II: 同上題

7. House Robber : 可以用滾動數組來優化

8. Maximum Product Subarray: 除了記錄當前最小值和當前最大值,關鍵是要把自己這個點加進去考慮

9. Longest Increasing Subsequence:這題的i和前面0~i-1個值都相關,所以沒法用滾動數組來優化了

10. Longest Increasing Continuous subsequence II: 這題叫做滑雪道問題,就是從最高處一直朝下滑。一道很好的記憶化搜索+backtracking的問題??梢栽僮鲆槐?/strong>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容