HDU 1257 最少攔截系統 最長遞增子串行

2022-03-16 21:57:18 字數 1089 閱讀 2136

這個題的意思是說給你\(n\)個數,讓你找到他最長的並且遞增的子串行\((lis)\)。這裡和最長公共子串行一樣\((lcs)\)一樣,子串行只要滿足前後關係即可,不需要相鄰。

解法一:這個可以用動態規劃來實現,\(dp[i]\)代表前\(i\)個數列中以第\(i\)個數為結尾的\(lis\)的長度。遞推關係如下:

\[dp[i] = \begin & max(dp[k])+1 & \text \end

\]複雜度為\(n^2\)。

解法二:這裡乙個\(dp[i]\),但是代表是長度為\(i\)的子串行中最後乙個元素是多少,這裡這個元素要盡量小。因為在同等長度下,最後乙個結尾的數值越小」越好「。複雜度為\(nlogn\)。效率很高了。

這個遞推關係有點複雜,詳情看**實現或者搜尋\(lis\)會有相關的部落格講解。

//解法一的形式

#include#include#includeusing namespace std;

const int maxn=1e3+7;

int dp[maxn][2];

int n;

int main()

int ans=1;

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

ans=max(ans, dp[i][1]);

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

} return 0;

}

//解法二

#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

const int maxn=1e3+7;

int dp[maxn], num[maxn];

int n;

int main()

int j, ans=0;

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

printf("%d\n", ans);

} return 0;

}

hdu1257 最少攔截系統

解釋 當炮彈乙個接乙個的從空中飛來時,系統可以攔住比它攔住前乙個高度低的炮,比前乙個高的不攔,給第二個系統攔 problem description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過...

hdu 1257 最少攔截系統

題目大意 給定一串飛彈的高度,問最少需要多少飛彈攔截系統。思路 lis 分析 首先,至少需要一套攔截系統,一開始可以打到第一顆飛彈的位置。之後每來一顆飛彈更新一下系統能打到的高度。一旦有一顆飛彈所有系統都打不到了,增加乙個系統。那麼就會得到乙個序列,每個系統目前能打到的最高位置。這個序列是遞增的,後...

HDU1257 最少攔截系統

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