2 16 求陣列中最長遞增子串行

2021-06-28 09:55:12 字數 700 閱讀 4962

題目:

求乙個一維陣列(n個元素)中最長遞增子串行的長度

方法一:

dp題**如下:

#include using namespace std;

const int maxn = 100000;

const int inf = 10000000;

int minv[maxn], lis[maxn], array[maxn];

int n;

//lis[i]表示從第i個元素開始的最長序列的長度

//minv[i]表示所有長度為i的序列中,最大的元素的最小值

//array這個陣列代表的是原始陣列

int lis(int *a, int n)

} //如果當前最長序列大於最長遞增序列長度,更新最長資訊

if(lis[i] > nmaxlen) else if(a[i] > minv[j] && a[i] < minv[j + 1])

} return nmaxlen;

}int main()

方法二:

利用最長公共子串行,求最長遞增子串行:

假設原陣列是:(5,6,7,1,2,8)

要求他的最長遞增子串行的話。

只需先將原陣列進行排序!得到:(1,2,5,6,7,8)

然後再求這兩個陣列的lcs(最長公共子串行)

2 16 求陣列中最長遞增子串行

題目 求乙個一維陣列 n個元素 中最長遞增子串行的長度 dp題 如下 include using namespace std const int maxn 100000 const int inf 10000000 int minv maxn lis maxn array maxn int n li...

求陣列中最長遞增子串行

原文見 分析過程很清楚。這裡主要是 部分有改動。完全用c寫的,從檔案中讀入。另外,解法二的程式加了去重,求的是最長單調遞增子串行。求陣列中最長遞增子串行 寫乙個時間複雜度盡可能低的程式,求乙個一維陣列 n個元素 中的最長遞增子串行的長度。例如 在序列1,1,2,3,4,5,6,7中,其最長的遞增子串...

求陣列中最長遞增子串行

最長遞增子串行,longest increasing subsequence 下面我們簡記為 lis。排序 lcs演算法 以及 dp演算法就忽略了,這兩個太容易理解了。假設存在乙個序列d 1.9 2 1 5 3 6 4 8 9 7,可以看出來它的lis長度為5。下面一步一步試著找出它。我們定義乙個序...