給定乙個序列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...