其實就是最長上公升子串行的一種變相,要求最長非上公升子串行,其實就是把大小順序換一下,替換是去替換子串行中那個第乙個比你小的數。分兩次,從頭和從尾開始,dp[i]表示到達i的子串行長度。加起來-1就是兩個序列到i的長度和。
#include#includeusing namespace std;
int main()
else
dp[i]+=len2;
}int maxx=0;
for(int i=1;i<=n;i++)
cout<
return 0;
}
對於**中標註的細節要注意。我這裡是直接用乙個dp來存長度,也可以分別用dp1 dp2陣列最後相加找最大值。 飛彈攔截(最長非上公升子串行和最長上公升子串行)
題目鏈結 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度...
最少攔截系統(最長上公升子串行)
某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈.怎麼辦呢?多搞幾套系統唄 你說說...
攔截飛彈,最長非上公升子串行,DP 二分
題目描述 某國為了防禦敵國的飛彈襲擊,開發出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲,並觀測到飛彈依次飛來的高度,請計算這套系統最多能攔截多少飛彈。攔截來襲飛彈時,必須按來襲飛彈襲...