最長遞增子串行之動態規劃 C語言實現

2021-10-05 23:10:37 字數 879 閱讀 1285

演算法步驟:

(1)設定乙個mark陣列,mark陣列的個數和原序列data的個數相等,mark[i]表示以data[i]作為結尾的最長遞增子串行的長度;

(2)在確定mark[i]時,在0到i-1中找到這樣乙個k,使得data[k]例項以及**

//data陣列是原序列,mark陣列儲存最長遞增子串行長度

//loc陣列儲存每乙個子串行最後乙個數的前趨

//n是序列長度

int data[20]

,mark[20]

=,loc[20]

,n;

//初始化序列

void

input()

//初始化mark陣列,採用動態規劃

void

maxlongsequence()

mark[i]

=max+1;

}}

//輸出最長的長度,以及最大遞增子串行的成員

void

output()

printf

("\n最長遞增序列為:");

for(i=k-

1;i>=

0;i--

)printf

("%d "

,res[i]);

}

int

main()

執行結果:

動態規劃 最長遞增子串行

給出序列 1 2 3 4 2 5 3 4 a 1 1,a 2 2,a 7 3,a 8 4 求其最長的遞增子串行,以上最長遞增子串行為 1 2 3 4 5 問題細分 初始化條件f 1 1,序列只有1個長度即為1 f 2 a 2 與下標小於2的比較,即a 1 比較,a 2 a 1 因此更新f 2 f 1...

動態規劃 最長遞增子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度 例項 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行為 2,3,7,101 長度為4說明 可能會有多種最長上公升子串行的和,只需要輸出對應長度即可 演算法的時間複雜度應為o n2 首先,dp陣列的定義如下 dp...

動態規劃 最長遞增子串行

最長遞增子串行是動態規劃中最經典的問題之一,該問題描述的是在乙個已知序列中,取出若干元素 不必連續 組成乙個新的序列,子串行的各個數先後順序保持不變,且對子序列中的任意下標x令dp i 表示以a i 作為末尾的最長遞增子串行的長度。於是,通過設定這麼乙個陣列,最長遞增子串行的長度便是陣列dp中的最大...