最長子序列問題

2021-08-07 14:05:04 字數 827 閱讀 5023

引子:洛谷p1020,飛彈攔截

【問題描述】某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。

輸入飛彈依次飛來的高度(雷達給出的高度資料是不大於50000的正整數),(1)計算這套系統最多能攔截多少飛彈

(2)如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

【解析】:此題的第一問即是求最長不上公升子串行的,第二問是求最長上公升子串行。

一.最長不上公升子串行

首先,從前往後定義子串行,當後面的不大於前面的時候,更新子串行長度和子串行端點,如果後面的大於前面的時候,二分查詢,更新長度為最長且小於數值小於自己的不上公升序列的結束點。

核心**(必背)

f[0]=1234123412;//這個數要大於50000,不然可能你就無法更新

int ans=0;//最長不上公升子串行的長度

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

else

}if(l!=0)f[l]=a[i];

}}

二。最長上公升子串行

同理,把最長不上公升子串行逆過來就是此答案了

核心**:

f[0]=1234123412;

int ans=0;

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

else

}if(l!=0)f[l]=a[i];

}}

最長子序列

最長子序列可以說是剛接觸動態規劃的人經常遇見也不得不解決的問題,最常見的有兩種,一種是最長公共子串行 lcs 還有乙個是最長上公升子串行 lis 今天我就總結下這兩個的做法。一 最長公共子串行 lcs 題目描述 給你兩個陣列,可以是數字的,也可以是字串,我們假設是數字的!舉個例子 x 1,5,6,4...

最長子序列

在做oj題目的時候,經常會用到字串的處理。例如,比較二個字串相似度。這篇文章介紹一下求兩個字串的最長公共子串行。乙個字串的子串行,是指從該字串中去掉任意多個字元後剩下的字元在不改變順序的情況下組成的新字串。最長公共子串行,是指多個字串可具有的長度最大的公共的子串行。include includech...

最長子序列

題 給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為8的陣列a,則其最長的單調遞增子串行為,長度為6。思路1 第一眼看到題目,很多人肯定第一時間想到的是lcs。先給陣列排個序形成新陣列,然後再把新陣列和原陣列拿來求lcs,即可得到答案。這種解法很...