1. 程式人生 > 實用技巧 >演算法| 高階動態規劃

演算法| 高階動態規劃

動態規劃 Dynamic Programming

1. “Simplifying a complicated problem by breaking it down intosimpler sub-problems”
  (in a recursive manner)

2. Divide & Conquer + Optimal substructure
  分治 + 最優子結構

3. 順推形式: 動態遞推

DP 順推模板
    function DP():
        dp = [][] # ⼆維情況
        for i = 0 .. M {
            for
j = 0 .. N { dp[i][j] = _Function(dp[i’][j’]…) } } return dp[M][N];

關鍵點:

動態規劃 和 遞迴或者分治 沒有根本上的區別(關鍵看有無最優的子結構)

擁有共性:找到重複子問題(找到重複性和重複子問題,然後化繁為簡,庖丁解牛似的把一個大問題分解成各個重複的子問題)

差異性:最優子結構、中途可以淘汰次優解(動態規劃用來處理有所謂中間的重複性以及所謂的最優子結構,在中途可以淘汰次優解)

常見的 DP 題目和狀態方程

爬樓梯問題和硬幣置換問題,有異曲同工之處