hdu 1257 最少攔截系統 (陣列)

2021-06-21 06:42:14 字數 1040 閱讀 9538

小記:因為當前的飛彈能打的高度不能高於前乙個飛彈的高度。所以從第一炮開始,如果能打就打,不能打就再加個系統,對系統編號。以後的要攔截的高度,從第乙個系統開始,若它能打,就打,更新它的可打高度,然後退出去,再看下乙個攔截高度。若是不能打, 就換下乙個看,若都不可以,則只能增加乙個新系統了。 就這樣.

**:

#include #include #include using namespace std;

const int max_ = 30005;

int p[max_];

int d[max_];

int main()

else if(j == k)}}

cout《另一種解法就是最長上公升子串行。因為每個飛彈都必須攔截,而且只能越攔越低,那麼就相當於是求最長上公升子串行的個數了。

而如果要求乙個這樣的系統最多能攔截多少個,那麼就是求最長非降子串行. (兩問加起來)是noip1999(提高組)第一題 

最長上公升子串行解法:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define mst(a,b) memset(a,b,sizeof(a))

#define rep(a,b,c) for(int a = b; a < c; ++a)

#define eps 10e-8

const int max_ = 30010;

const int n = 100010;

const int inf = 0x7fffffff;

int a[max_];

int d[max_];

int main()

int ans = -inf;

rep(i,1,n)

}ans = max(ans, d[i]);

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

} return 0;

}

hdu1257 最少攔截系統

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

hdu 1257 最少攔截系統

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

HDU1257 最少攔截系統

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