最大連續子串行的和與最長不下降序列

2021-10-08 14:27:48 字數 801 閱讀 4391

1、連續子陣列的最大和–動規求解

例如:,連續子向量的最大和為8(從第0個開始,到第3個為止)。

如果用函式dp(i)表示以第i個數字結尾的子陣列的最大和,那麼我們只需要求出

max[dp(i)],其中可以用如下遞迴公式。

當i=0時,或者dp(i-1)<=0時,dp(i)=array[i];

當i≠0時,或者dp(i-1)>0時,dp(i)=dp(i-1)+array[i];

function

findgreatestsumofsubarray

(array)

else

max = dp[i]

> max ? dp[i]

: max

}return max

}

2、求最長不下降序列

在乙個數字序列中,找到乙個最長的子串行,可以不連續,使得這個子串行是不下降的(非遞減的)

樣例1 2 3 -1 -2 7 9

最長不下降的子串行是 1 2 3 7 9,長度為5

同用動規求解,與上題亦有異曲同工之妙

function

findgreatestsumofsubarray

(array)

if(dp[i]

> max)

}return

}

最長不下降子串行

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