動態規劃入門 1 最長遞增子串行

2022-02-16 05:08:52 字數 961 閱讀 9999

__________________________工作學習之餘,一邊聽歌,一邊推敲。人生一大快事!

不斷修煉自己讀**的能力。

眉眼初抬,且看最長遞增子串行。

設長度為n的陣列為

,則假定以

結尾的陣列序列的最長遞增子串行長度為l(j),則

。也就是說,我們需要遍歷在j之前的所有位置i(從0到j-1),找出滿足條件a[i]

最後,我們遍歷所有的l(j)(從0到n-1),找出最大值即為最大遞增子串行。時間複雜度為o(n^2)。

例如給定的陣列為,則l(0)=1, l(1)=2, l(2)=3, l(3)=1, l(4)=2, l(5)=4。所以該陣列最長遞增子串行長度為4,序列為。

my codes:

#include#define len(a) (sizeof(a) / sizeof(a[0])) 

//求取陣列長度優秀預定義

using

namespace

std;

int lis(int a,int

len)

}int max=0

;

for(int j=0;j)

return

max;

}int

main()

;

int res=lis(a,len(a));

cout

return0;

}

my codes2:

#includeusing

namespace

std;

intmain()

for(int i=1;i)

}int max=0

;

for(int i=0;i)

cout

return0;

}

牛刀小試:

參考:

動態規劃 最長遞增子串行

給出序列 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中的最大...