百練2757 最長上公升子串行

2022-09-18 13:12:09 字數 2347 閱讀 6119

,當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

1.遞迴做法,不說了肯定超時。。

1 #include2 #include3

using

namespace

std;

4int a[1010];5

intn;

6int f(int index)//

求以a[index]為終點的最長上公升子串行的長度712

int maxv = 1;13

for(int i = 1;ii)

1419}20

return

maxv;21}

22int

main()

2329

int maxv = 0;30

for(int i = 1;i<=n;++i)

3134 cout << maxv <35return0;

36 }

2.記憶遞迴型動規

1 #include2 #include3

using

namespace

std;

4int a[1010];5

int dp[1010];6

intn;

7int cnt = 0;8

int f(int index)//

求以a[index]為終點的最長上公升子串行的長度

914 cnt++;

15int maxv = 1;16

for(int i = 1;ii)

1722

}23 dp[index] =maxv;

24return

dp[index];25}

26int

main()

2735 dp[1] = 1;36

int maxv = 0;37

for(int i = 1;i<=n;++i)

3841 cout << maxv <42 cout <<"

cnt:

"43return0;

44 }

3.「人人為我」遞推型動規,狀態是n個,算出每個狀態的時候需要乙個迴圈,因此總的時間複雜度是o(n^2)的。

#include#include

using

namespace

std;

int a[1010

];int dp[1010];//

dp[i]表示以a[i]為終點的最長上公升子串行的長度

intn;

intmain()

for(int i = 2;i <=n;++i)

for(int j = 1;jj)

}cout

<< *max_element(dp+1,dp+n+1)

}

4.「人人為我」遞推型動規,時間複雜度也是o(n^2)的。

1 #include2 #include3

using

namespace

std;

4int a[1010];5

int dp[1010];//

dp[i]表示以a[i]為終點的最長上公升子串行的長度

6intn;7

8int

main()916

for(int i = 1;i <=n;++i)

17for(int j = i+1;j<=n;++j)///

/看看能更新哪些狀態的值

1823

}24 cout << *max_element(dp+1,dp+n+1) <25return0;

26 }

最長上公升子串行(百練2757)

總時間限制 2000ms 記憶體限制 65536kb 描述 乙個數的序列 bi,當 b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2 an 我們可以得到一些上公升的子串行 ai1,ai2 aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8...

百練 2757 最長上公升子串行

總時間限制 2000ms 記憶體限制 65536kb 描述乙個數的序列 bi,當 b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2 an 我們可以得到一些上公升的子串行 ai1,ai2 aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 ...

最長上公升子串行(百練2757)

總時間限制 2000ms 記憶體限制 65536kb 描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有...