最長上公升子串行 O n 2 和O nlogn

2021-08-17 12:13:43 字數 919 閱讀 6722

最長上公升子串行 

【題目描述】

給定n個數,求這n個數的最長上公升子串行的長度。

【樣例輸入】

72 5 3 4 1 7 6

【樣例輸出】

注:在網上看了不少關於最長上公升子串行的求解方法 總結能力不太好 只能舉例子了 

方法一用b[i]表示以a[i]結尾的上公升子串行的長度 時間複雜度為o(n^2)

#includeusing namespace std;

void init(int * b,int n)

init(b,n);//把b陣列初始化為1 當a[i]前面的元素都比a[i]大時 b[i] = 1;

for(i=1;ia[j])

}} if(b[i]>max)

} cout<

方法二 

b[len] 代表 所有長度為len的上公升子串行中最末位元素得最小值 

例如2 5 3 4 1 7 6

a[1] = 2 時 b[1] = 2 目前長度為1 最小的為2 b[1] = 2 

a[2] = 5 時 b[2] = 5 5>b[1] 長度+1 b[2] = 5

a[3] = 3 時 b[2] = 3 3b[2]  b[2+1] = 4 

a[5] = 1 時 b[1] = 1 1b[3] b[3+1] = 7 

a[7] = 6 時 b[4] = 6 6using namespace std;

int find(int tmp,int * b ,int left,int right);

int main()

b[len] = a[0];

for(i=1;ib[len])

else

} coutelse if(tmp > b[mid])

else

}}

LIS 最長上公升子串行問題 O n 2

繼續dping 有乙個長為n的數列 a0 a1.an 1 請求出這個序列中最長的上公升子串行的長度。上公升子串行指的是對於任意的i其中 1 n 1e3 0 ai 1e6 這裡給出的 n 2的演算法 不過有更快的 先把這個弄懂了再研究nlogn的 這裡的dp i 表示 前i 1個個數的最長上公升子串行...

最長上公升子串行

問題描述 乙個數的序列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 等等...

最長上公升子串行

最長上公升子串行問題是各類資訊學競賽中的常見題型,也常常用來做介紹動態規劃演算法的引例,筆者接下來將會對poj上出現過的這類題目做乙個總結,並介紹解決lis問題的兩個常用 演算法 n 2 和 nlogn 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7.an,求它的乙個子串行 設為s1...