第四節 動態規劃上

總結:git

1.何時用動態規劃?code

      知足下面三個條件之一,極有多是使用動態規劃:ip

      求最大值最小值;it

      判斷是否可行;io

      統計方案個數(而不是給出每一個具體的方案);模板

 

2.何時不使用動態規劃?cli

     知足下面三個條件之一,極不多是使用動態規劃:方法

     求出全部具體方案而非方案個數;im

     輸入數據是一個集合而不是序列;(揹包問題除外)
     暴力方法複雜度已是多項式級別;統計

3.動規四要素

    (1)狀態

            靈感,創造力,存儲小規模問題的結果

    (2)方程

            狀態之間的聯繫,怎麼經過小的狀態,來算大的狀態

    (3)初始化

            最極限的小狀態是什麼, 起點 

    (4)答案

            最大的那個狀態是什麼,終點

 

4.六類動規(每種類型的狀態定義比較固定):

  座標型動態規劃

  序列型動態規劃

  雙序列動態規劃 

  劃分型動態規劃

  揹包型動態規劃

  區間型動態規劃

 

5.座標型動態規劃

特色:路徑,小人走

狀態模板:  f[x] 表示我從起點走到座標x……

          f[x][y] 表示我從起點走到座標x,y……

lintcode例子:114,115 unique paths i and ii,

              111 climbing stairs,

              110 Minimun path sum,

              109 Triangle,

              116,117 Jump game i and ii,

              76 Longest Increasing Subsequence.

 

6.tips

      (1)貪心法不須要學,由於沒有通用性,「背誦」如下幾個經典的題目便可:

             http://www.lintcode.com/en/problem/majority-number/
     http://www.lintcode.com/en/problem/create-maximum-number/
         http://www.lintcode.com/en/problem/jump-game-ii/
         http://www.lintcode.com/en/problem/jump-game/
     http://www.lintcode.com/en/problem/gas-station/
     http://www.lintcode.com/en/problem/delete-digits/
     http://www.lintcode.com/en/problem/linked-list-cycle-ii/
     http://www.lintcode.com/en/problem/linked-list-cycle/

     (2)動態規劃與分治的本質區別:子問題之間有無交集。

相關文章
相關標籤/搜索