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