Dp 最長上公升子串行模板

2021-10-03 01:36:12 字數 1311 閱讀 8882

怪盜基德是乙個充滿傳奇色彩的怪盜,專門以珠寶為目標的超級盜竊犯。

而他最為突出的地方,就是他每次都能逃脫中村警部的重重圍堵,而這也很大程度上是多虧了他隨身攜帶的便於操作的滑翔翼。

有一天,怪盜基德像往常一樣偷走了一顆珍貴的鑽石,不料卻被柯南小朋友識破了偽裝,而他的滑翔翼的動力裝置也被柯南踢出的足球破壞了。

不得已,怪盜基德只能操作受損的滑翔翼逃脫。

假設城市中一共有n幢建築排成一條線,每幢建築的高度各不相同。

初始時,怪盜基德可以在任何一幢建築的頂端。

他可以選擇乙個方向逃跑,但是不能中途改變方向(因為中森警部會在後面追擊)。

因為滑翔翼動力裝置受損,他只能往下滑行(即:只能從較高的建築滑翔到較低的建築)。

他希望盡可能多地經過不同建築的頂部,這樣可以減緩下降時的衝擊力,減少受傷的可能性。

請問,他最多可以經過多少幢不同建築的頂部(包含初始時的建築)?

輸入格式

輸入資料第一行是乙個整數k,代表有k組測試資料。

每組測試資料報含兩行:第一行是乙個整數n,代表有n幢建築。第二行包含n個不同的整數,每乙個對應一幢建築的高度h,按照建築的排列順序給出。

輸出格式

對於每一組測試資料,輸出一行,包含乙個整數,代表怪盜基德最多可以經過的建築數量。

資料範圍

1≤k≤1001≤k≤100,

1≤n≤1001≤n≤100,

0輸入樣例:

3

8300 207 155 299 298 170 158 65

865 158 170 298 299 155 207 300

102 1 3 4 5 6 7 8 9 10

輸出樣例:

6

69

分析:

怪盜基德可以選定乙個起點和選定乙個方向 ,然後開始跳。從左向右看就是乙個最大上公升子串行問題,從右向左看也是乙個最大上公升子串行問題。所以只需要做倆遍最大上公升子串行就可以了。

//從右向左lis

for(int i=n;i;i--)

cout<

}return 0;

}

最長上公升子串行(DP 模板)

有兩個不可描述的線段,每個上面有 n 個介面,現在給定了乙個連線,求如果減去一些連線的話,最大的不交叉連線個數是多少。省賽選拔賽的題,英文題面太長直接沒看。理解題意後挺簡單的,只要找到規律。要求最大的不交叉,可以找到乙個規律,就是求不遞減子串行,不過這裡用 o n 2 的會超時,所以用了乙個 o n...

DP最長上公升子串行問題模板

模板來自 挑戰程式設計競賽 第二版 複雜度為o n 2 的方式 dp i 表示以a i 為結尾的陣列中最長的上公升子串行的長度 dp i max 1,dp j 1 printf d lower bound dp,dp n,inf dp 這裡的lower bound dp,dp n,x 函式是在 dp...

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 等等。這些子串中最長...