zcmu 2112(最長不下降子串行)

2021-08-21 23:42:22 字數 839 閱讀 7831

時間限制: 1 sec  記憶體限制: 128 mb

提交: 250  解決: 45

[提交][狀態][討論版]

如果有人認為吃東西只需要嘴巴,那就錯了。

都知道舌頭有這麼乙個特性,「由簡入奢易,由奢如簡難」(據好事者考究,此規律也適合許多其他情況)。具體而言,如果是甜食,當你吃的食物不如前面剛吃過的東西甜,就很不爽了。

大寶是乙個聰明的美食家,當然深諳此道。一次他來到某小吃一條街,準備從街的一頭吃到另一頭。為了吃得爽,他大費周章,得到了各種食物的「美味度」。他拒絕不爽的經歷,不走回頭路而且還要爽歪歪(爽的次數盡量多)。

兩行資料。

第一行為乙個整數n,表示小吃街上小吃的數量

第二行為n個整數,分別表示n種食物的「美味度」

乙個整數,表示吃得爽的次數

3 18 7 14 10 12 23 41 16 24

美味度為0到10000的整數

n<200000

演算法提高

[提交][狀態][討論版]

中文english

心得:最長不下降子串行,就像本題,最長不下降子串行是,長度是6。

如果設定兩個陣列a,b,

1、如果a[i]>=b[j],就讓b[++j]=a[i];

2、否則,就再b陣列中找到比a[i]大的b[k],將b[k]的值變為a[i];

#includeusing namespace std;

int a[200200],b[200200];

int main(void)

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

return 0;

}

參考文章:

最長不下降子串行

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