最長上公升子串行 動態規劃 最長上公升子串行LIS

2021-10-12 18:27:16 字數 1043 閱讀 1904

問題描述

最長上公升子串行(lis):

給定長度為n的序列,從中選中乙個子串行,這個子串行需要單調遞增,請問最長子序列(lis)的長度?

eg:1,5,2,3,11,7,9

則lis序列為:1,2,3,7,9 長度為5

設計狀態:

記f(x)為以a[x]為結尾的lis長度,那麼lis=max

那麼如何推到f(x)呢?

考慮比x小的每乙個p,如果a[x] > a[p],那麼f(x) = f(p) + 1

狀態轉移方程

f(x) = max + 1

a[x] = 1,5,3,4,8 x = 1 2 3 4 5

f(1) = 1

f(2) = f(1) +1 或者 0 +1 -------- > f(2) = 2

f(3) = f(1)+1 = 2 或者 0+1 = 2 -----》 f(3) = 2

f(4) = f(1) + 1 = 2 或者 f(3) + 1 = 3 或者 0+1 = 1 ------》 f(4) =3

f(5) = f(1) + 1 = 2 或者 f(2) + 1 = 3 或者 f(3) + 1 = 3 或者 f(4) + 1 = 4 或者 0+1 = 10+1 = 1

即最後的結果是4

**如下:

那麼哪些題目適合用dp演算法解決呢?如何設計好的dp演算法:

滿足最優子結構

大問題可以由小問題推出,大問題與小問題求解思路一致

2. 滿足無後效行

一旦f(n)確定,後續我們直接呼叫它的值就可以了,而不需要關心它是怎麼過來的

3. 設計好狀態

想辦法把當前局面表達出來

4. 設計好狀態轉移方程

可以從兩個方面考慮,我從**來,或者我到**去

5. **實現

最長上公升子串行 (動態規劃)

描述乙個數的序列 bi,當 b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等。...

最長上公升子串行(動態規劃)

描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等。這...

最長上公升子串行(動態規劃)

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。說明 可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。你演算法的時間複雜度應該為 o n2 原題跳轉鏈...