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

2021-08-20 17:49:29 字數 985 閱讀 8902

描述乙個數的序列

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

解題思路:

運用動態規劃,陣列d用來儲存輸入的資料,而陣列dp中的元素dp[i]用來表示以d[i]的結尾的最長的子串行。

以d[i]結尾的上公升子串行是以下兩種:

1.只有d[i]的乙個子串行。

2.在滿足了j所以得到公式 dp[i]=max(1,dp[j]+1|i>j且d[i]>d[j])。

因為有兩層迴圈,所以這個公式的時間複雜度為ο(n*n)。

#includeusing namespace std;

int d[1005];

int dp[1005];

int main()

int res=0;

for(int i=0;id[j])

}res=max(res,dp[i]);

}cout

}

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

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