線性DP 最長不上公升子串行

2022-09-19 03:42:11 字數 463 閱讀 2350

\[f_i=max(1,f_j+1),其中1\leq j\leq i-1,且a_j\geq a_i

\]發現每次求f值實際上都是求大於等於\(a_i\)的j中\(f_j\)的最大值

所以可以以a的值為下標建立值域線段樹。線段樹的節點[l,r]存的是,所有在[l,r]範圍內的a值,其f值的最大值。每次查詢(a[i],maxa)中f的最大值更新f[i]。每次單點插入,下標為a[i],權值即為f[i],並與原先線段樹的節點取max

維護d陣列,d[i]表示最長子序列長度為i時,最優的結尾數值(對於本題,即為最大值),並設len表示當前最長子序列的長度

其實d陣列單調遞減,即子串行長度越長,d值越小,證明可用反證法。

對於元素i,

若d[len]>=a[i],那麼d[++len]=a[i]

否則,設d[k]>=a[i]>d[k+1],那麼d[k+1]=a[i],k可以二分查詢

最終len即為所求。

飛彈攔截(dp 最長不上公升子串行)

從頭填坑。除了數字三角形之外做的第二道dp。題目描述 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲,由於該系統還在試用階段,所以只有一套系統,因此有可...

攔截飛彈 線性DP求最長不上公升子串行 貪心

題目 解題思路 第一問 沒什麼好說的,基礎的線性dp求解經典的最少不上公升 下降 子串行 第二問 貪心思想。需要n個飛彈就想當於把一串數字劃分為n個部分,且每個部分都是一段遞減的子串行 例如 6 5 1 7 3 2 需要最少的炮彈 6 5 1 7 3 2 顯然劃分了兩個部分。如果想讓需要的炮彈數最少...

LIS最長不上公升子串行

描述 的數值串行乙個我是有序的,如果乙個1 乙個2 乙個 令給定數字序列 a 1,a 2,a n 的子串行為任何序列 a i 1,a i 2,a ik 其中1 i 1 i 2 i k n.例如,序列 1,7,3,5,9,4,8 具有有序子串行,例如 1,7 3,4,8 和許多其他子串行。所有最長有序...