UESTC 1006 最長上公升序列 腦洞 簡單dp

2021-09-30 14:11:05 字數 1565 閱讀 1903

乙個數的序列b=

(b1,

b2,⋯

,bs)

,當b1<

⋯的時候,我們稱這個序列是上公升的。對於給定的乙個序列a=

(a1,

a2,⋯

,an)

,我們可以得到一些上公升的子串行(a

i1,a

i2,⋯

,aik

) ,這裡1≤

i1<

⋯≤n。比如,對於序列(1

,7,3

,5,9

,4,8

) ,有它的一些上公升子串行,如(1

,7) , (3

,4,8

) 等等。這些子串行中最長的長度是

4 ,比如子串行(1

,3,5

,8)

你的任務,就是對於給定的序列,求出最長最小的上公升子串行。所謂最長最小的子串行,是指若有多個最長子序列時,存在乙個子串行a=(

as1,

as2,

⋯,as

k),對其它任意最長子序列b=

(at1

,at2

,⋯,a

tk) ,有前i−

1 個元素相等, 而as

ii ,則a

是最長最小的上公升子串行。

input

有多組測試資料。輸入的第一行是整數t

( 0

100 ),表示測試資料的組數。每組測試資料佔一行,第乙個數是序列的長度

n (

1≤n≤

1000

)。緊隨其後是序列中的

n 個整數,該行每個數後均有乙個空格,這些整數的取值範圍都在

0 到

10000

。該行沒有其它多餘的符號。

output

對應每組輸入,先輸出最長最小的上公升子串行長度,再輸出最長最小的上公升子串行,佔一行。每個數後應有乙個空格,該行不能有其它多餘的符號。

sample input

1

7 1 7 3 5 9 4 8

sample output

4 1 3 4 8

乍一看,水題,但要求輸出最小的,那我們可以這樣處理:上公升子串行,即要求後面的數大於前面的數。即這個數列中數所在的位置與值均大於前乙個數。那麼對於這題,我們可以先根據數值大小,對這一串數進行排序,保證後乙個數大於等於前乙個數,此時,我們對他們所在的位置求最長上公升子串行。(這樣,保證每次更新最長串長的時候,該序列都是最小的)

p.s. 此題的輸出格式實在是坑。。。。。。

**://by sean chen

#include #include #include #include #include using namespace std;

struct node;

int cmp(node a,node b)

}dp[i]=max+1;

if (dp[i]>ans)

}printf("%d ",ans);

int cnt=0,xx=anspos;

while (xx!=-1)

cout<

UESTC 1006 最長上公升子串行

乙個數的序列b b1,b2,bs b b1,b2,bs 當b1有多組測試資料。輸入的第一行是整數tt 0對應每組輸入,先輸出最長最小的上公升子串行長度,再輸出最長最小的上公升子串行,佔一行。每個數後應有乙個空格,該行不能有其它多餘的符號。1 7 1 7 3 5 9 4 8 sample output...

最長上公升序列

給定乙個未經排序的整數陣列,找到最長且連續的的遞增序列。示例 1 輸入 1,3,5,4,7 輸出 3解釋 最長連續遞增序列是 1,3,5 長度為3。儘管 1,3,5,7 也是公升序的子串行,但它不是連續的,因為5和7在原陣列裡被4隔開。示例 2 輸入 2,2,2,2,2 輸出 1解釋 最長連續遞增序...

最長上公升子串行

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