最長上公升子串行(動態規劃)

2021-08-22 15:10:30 字數 977 閱讀 1960

描述

乙個數的序列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)等等。這些子串行中最長的長度是4,比如子串行(1, 3, 5, 8).

你的任務,就是對於給定的序列,求出最長上公升子串行的長度。

輸入輸入的第一行是序列的長度n (1 <= n <= 1000)。第二行給出序列中的n個整數,這些整數的取值範圍都在0到10000。

輸出最長上公升子串行的長度。

樣例輸入

7

1 7 3 5 9 4 8

樣例輸出

4
1.找子問題:

將問題轉化成以ak為終點最長上公升子串行的長度,到最後取最大值。

2.確定狀態

該子問題只與數字的位置有關,狀態有n個

3.找出狀態轉移方程

若maxlen (k)表示以ak做為「終點」的最長上公升子串行的長度

若ak的值大於左邊任意值,就等於,「終點「數值小於ak且長度最大的那個上公升子串行的長度再加1

#include#include#include#define m 1010

using namespace std;

int main()

for(int i=2;i<=n;i++)}}

printf("%d\n",*max_element(maxlen+1,maxlen+n+1));//此為stl中求陣列中的最大值,因返回值為位址,故加*,最小值時為min_element();

}

最長上公升子串行 (動態規劃)

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

最長上公升子串行(動態規劃)

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。說明 可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。你演算法的時間複雜度應該為 o n2 原題跳轉鏈...

最長上公升子串行(動態規劃)

乙個數的序列 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 等等。這...