最長不下降子串行 (3種做法)

2021-08-08 17:47:07 字數 1074 閱讀 6917

最長不下降子串行,顧名思義就是總一組資料中找到一組最長數,這一組資料保證是b[0]<=b[1]<=b[2]......<=b[n-1]

最簡單的是樸素演算法,還有dp的nlogn , stack nlogn   演算法寶典416頁

具體思路不說了,忘了記得多看看書。

///stack優化 nlogn

#include #include #include using namespace std ;

const int maxn = 10000 + 10 ;

int a[maxn] , mystack[maxn] ;

int main()

else

else

}mystack[l] = temp ;}}

printf("%d\n" , top) ;

}return 0 ;

}///初步優化nlogn

/* #include #include #include using namespace std ;

const int maxn = 1000 + 10 ;

int a[maxn] , mark[maxn] , len ;

int tofind(int x)

return l ;

} int main()

len = 1 ;

mark[len] = a[len] ;

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

else

}printf("%d\n" , len) ;

}return 0 ;

}*////樸素演算法

/*#include #include #include #include using namespace std ;

const int maxn = 10000 + 10 ;

int a[maxn] , mark[maxn] ;

int main()

for(int i = n-1 ; i>= 0 ; i--)}}

printf("%d\n" , maxlen) ;

}}*/

最長不下降子串行

a1 t0 an a an 1 2 b an c d n 1 求該序列最長不下降子串行長度 n不是很大顯然可以暴力。n很大呢?那就不斷減迴圈節長度直至減到乙個閾值內,再暴力。正確性顯然,只要閾值不要設太小。include include include define fo i,a,b for i a...

最長不下降子串行

最長不下降子串行解法 第一種就是普通的dp方法 for int i 1 i n i dp 0 1 for int i 1 i n i ans max ans,dp i cout 主要記錄一下n logn的寫法 二分 主要思路 用乙個陣列 b 來記錄最長的子串行 一開始讓b 1 a 1 陣列a為輸入的...

最長不下降子串行

例子 openjudge 4977 怪盜基德的滑翔翼 描述怪盜基德是乙個充滿傳奇色彩的怪盜,專門以珠寶為目標的超級盜竊犯。而他最為突出的地方,就是他每次都能逃脫中村警部的重重圍堵,而這也很大程度上是多虧了他隨身攜帶的便於操作的滑翔翼。有一天,怪盜基德像往常一樣偷走了一顆珍貴的鑽石,不料卻被柯南小朋友...