線性dp典中典題目 最長上公升子串行(LIS)

2021-09-29 04:28:13 字數 850 閱讀 8172

首先講講什麼是子串行:

1.子串行的元素不一定相鄰;

2.子串行一定是原序列的子集;

**題目鏈結**

解法一:

線性動態規劃:複雜度(n^2)

我們可以維護乙個陣列dp,使得dp[i]為以i元素為結尾的最長上公升子串行的長度,那麼對於每乙個dp[i]而言,初始值都為1;

這種寫法對於上面那道題來說,tle;

**:

#include

#define ll long long

#define pa pair

#define lson k<<1

#define rson k<<1|1

//ios::sync_with_stdio(false);

using

namespace std;

const

int n=

1000100

;const

int m=

200100

;const ll mod=

1e9+7;

int dp[

50010];

int a[

50010];

intmain()

for(

int i=

1;i<=n;i++)}

} cout

}

解法二:

二分搜尋+單調棧(也可以說模擬):複雜度為(nlgn)

我的另一篇部落格有詳細寫過

這種寫法有個缺陷,就是無法求出最長子序列的具體元素是什麼?

不是最後棧裡面的元素就是最長子序列,只是長度可以求;

Dp 最長上公升子串 最長上公升子串行

乙個數的子串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,5,9 等等。這些子串中最長...

最長上公升子串行(DP)

time limit 3000ms memory limit 65536k 有疑問?點這裡 乙個數的序列bi,當b 1 b 2 b s的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a 1,a 2,a n 我們可以得到一些上公升的子串行 a i1,a i2,a ik 這裡1 i 1 i 2 i...

最長上公升子串行(Dp)

lis問題是最經典的動態規劃基礎問題之一。如果要求乙個滿足一定條件的最長上公升子串行,你還能解決嗎?給出乙個長度為n整數序列,請求出它的包含第k個元素的最長上公升子串行。例如 對於長度為6的序列 2,7,3,4,8,5 它的最長上公升子串行為 2,3,4,5 但如果限制一定要包含第2個元素,那滿足此...