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