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

2022-05-25 14:00:17 字數 1200 閱讀 4070

總時間限制: 2000ms 記憶體限制: 65536kb

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

輸出 最長上公升子串行的長度。

樣例輸入71

7359

48樣例輸出

4

#include

using

namespace

std;

int a[1005],b[1005],c[1005],t1,s;

void dfs(int i,int t)//對每個數的是否選擇的可能進行列舉搜尋

if(i==s+1)//結束,進行取最大值

if(a[i]>b[t])//進行深搜

dfs(i+1,t);

}int main()

時間複雜度為o(2^n),不負眾望的·········超時了。

#include

using

namespace

std;

int main()

/*儲存a[1]~a[i]的最長上公升子串行的長度*/,a[1005]/*儲存值*/,i,s,j;

cin>>s;

for(i=1;i<=s;i++)

cin>>a[i];

for(i=1;i<=s;i++)

b[i]++;//算上自己本身

}sort(b+1,b+s+1);//其實只是為了找到最大值,懶得打**,直接用algorithm自帶的演算法庫中的排序。

cout

0;}

時間複雜度o((n^2)/2),

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

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

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

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

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

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