最長單調遞增子串行 動態規劃

2021-07-03 03:33:13 字數 506 閱讀 7028

給定乙個序列x[0···n],找出它的最長的單調遞增子串行(longest increasing subsequence)

使用動態規劃方法。

對於i= 1, 2, ……,n,考慮以xi作為最後項的最長遞增子串行的長度c[i].

如果在xi項前面存在xj < xi , 那麼 c[i] = max +1;否則,c[i] = 1.

因此,

c[i] = max + 1, 存在j,1

<=j

<=j

xic[1] = 1

在計算c[i]的時候,用k[i] 記錄c[i]取得最大值時候j的值。

如果不存在這樣的j,令k[i] = 0。

這個記錄用於追蹤解。

所求的最長遞增子串行的長度是:

c = max
對於每個i,需要檢索比i小的所有的j,需要o(n)的時間,i的取值有n種,所以演算法時間複雜度是:

w(n) = o(n^2)

最長遞增子串行 動態規劃

問題描述 輸入一組亂序的資料,輸出這組資料的最長的遞增序列,如輸入x 2 8 9 4 6 1 3 7 5 10 則輸出 2 4 6 7 10 求解最長遞增子串行的問題,我們考慮用動態規劃,而動態規劃,我們就得弄清楚子問題,最終的解決辦法如下 1.在遍歷資料的過程中,記錄下排第幾的數是哪一位,用l 陣...

最長遞增子串行 動態規劃

include using namespace std int getvalue dequed,listtemp return temp.size void final dequed,listtemp else for auto it temp printf d it int main temp i...

最長遞增子串行(動態規劃實現)

題目描述 題目 於牛客網 對於乙個數字序列,請設計乙個複雜度為o nlogn 的演算法,返回該序列的最長上公升子串行的長度,這裡的子串行定義為這樣乙個序列u1,u2.其中ui ui 1,且a ui a ui 1 給定乙個數字序列a及序列的長度n,請返回最長上公升子串行的長度。測試樣例 2,1,4,3...