最長不下降子串行

2021-10-02 04:50:32 字數 534 閱讀 7078

最長不下降子串行解法

第一種就是普通的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為輸入的乙個序列) ,從i=2開始迴圈,如果a[ i ] 大於了當前的這個 b 陣列的末尾元素,直接讓b在後面加上這個a[ i ]即可,如果不大於,那麼查詢b陣列的元素,找到第乙個大於a[ i ]的那個元素,讓a[ i ]頂替它,此後一直這樣維護陣列b,最後b的長度就是最長不下降子串行的長度;

//用陣列b來記錄這個最長的子串行

//a是輸入的序列

b[1]=a[1];

len =1;

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

}//最後len的長度即為最長的子串行長度

最長不下降子串行

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...

最長不下降子串行

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

最長不下降子串行

分析 在考場上的思路是對的 d的範圍很小,所以總有迴圈的一天,這樣我們處理出迴圈節,需要注意的是,迴圈節不一定從1開始 比如說 1 4 2 5 3 2 5 3 迴圈節從第3位開始 我在考場上把序列縮到 不迴圈部分 乙個迴圈節 長度設為n 在序列上做最長不下降子串行,至於之後的迴圈節,他們對答案都可以...