經典DP 最長上公升子串行

2021-08-06 01:15:33 字數 921 閱讀 3376

【題目描述】

【輸入】

第一行乙個整數n(n<=1000) 表示長度,第二行 n個數 a[i]表示序列裡面的數,每個數不超過int範圍。

【輸出】

一行 表示最長遞增子串行的長度

【樣例輸入】

6 1 6 2 5 4 7

【樣例輸出】

4【分析】

這道題顯然是一道dp題,我們很容易想到定義f[i]表示前i個數中,其中a[i]必取,可以得到的最長遞增子串行的長度。

這道題目的前一狀態就是

j = 1 to i - 1 中 滿足 a[j] < a[i] 的 max(f[j])+ 1

此外,還有乙個細節,顯然,f[i]最小為1(因為包括它本身),所以一開始應當將 f 陣列全部清成 1,或者 j 這層迴圈從0開始

【**】

#include 

using

namespace

std;

const

int maxn = 1005;

int n, ans, a[maxn], f[maxn];

inline

int read()

int main()

【總結】dp做法時間複雜度o(n^2)

還有一種時間複雜度為o(nlogn)的二分優化法,不過這一題o(n^2)的想法是可以ac的,並且這篇文章的標題是」經典dp」而不是」經典二分」,所以就不配二分的**了。

by : xay5421

date : 2017.08.10

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個元素,那滿足此...