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

2021-10-24 13:25:50 字數 1077 閱讀 9422

題目

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。

示例:輸入: [10,9,2,5,3,7,101,18]

輸出: 4

解釋: 最長的上公升子串行是 [2,3,7,101],它的長度是 4。

思路:

義 dp[i]dp[i] 為考慮前 ii 個元素,以第 ii 個數字結尾的最長上公升子串行的長度,注意 \textit[i]nums[i] 必須被選取。

我們從小到大計算 dpdp 陣列的值,在計算 dp[i]dp[i] 之前,我們已經計算出 dp[0 \ldots i-1]dp[0…i−1] 的值,則狀態轉移方程為:

dp[i] = \text(dp[j]) + 1, \text , 0 \leq j < i , \text , \textit[j]<\textit[i]

dp[i]=max(dp[j])+1,其中0≤j即考慮往 dp[0 \ldots i-1]dp[0…i−1] 中最長的上公升子串行後面再加乙個 \textit[i]nums[i]。由於 dp[j]dp[j] 代表 \textit[0 \ldots j]nums[0…j] 中以 \textit[j]nums[j] 結尾的最長上公升子串行,所以如果能從 dp[j]dp[j] 這個狀態轉移過來,那麼 \textit[i]nums[i] 必然要大於 \textit[j]nums[j],才能將 \textit[i]nums[i] 放在 \textit[j]nums[j] 後面以形成更長的上公升子串行。

最後,整個陣列的最長上公升子串行即所有 dp[i]dp[i] 中的最大值。

\text_}= \text(dp[i]), \text , 0\leq i < n

lislength

​ =max(dp[i]),其中0≤ipublic

intlengthoflis

(int

n)int[

]dp=

newint

[n.length]

; dp[0]

=1;int max=1;

for(

int i=

1;i)return max;

}

動態規劃練習 01 最長上公升子串行

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

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

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

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

動態規劃 儲存遞迴中間結果,減少遞迴次數 總時間限制 2000ms 記憶體限制 65536kb 描述 乙個數的序列 bi,當 b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2 an 我們可以得到一些上公升的子串行 ai1,ai2 aik 這裡1 i1 i2 ik n。...