藍橋杯 攔截飛彈

2021-10-20 18:20:06 字數 1300 閱讀 6288

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

輸入飛彈依次飛來的高度(雷達給出的高度資料是不大於30000的正整數),計算這套系統最多能攔截多少飛彈,如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

輸入格式

一行,為飛彈依次飛來的高度

輸出格式

兩行,分別是最多能攔截的飛彈數與要攔截所有飛彈最少要配備的系統數

樣例輸入

389 207 155 300 299 170 158 65

樣例輸出62

在這個題目中我們以上面的資料為例,倘若第乙個飛彈發射高度為389,那麼之後比389小的地方全部能夠打到,那麼問題就來了?我們第二課飛彈的發射高度應該是多少呢 207還是300呢?我們發現第二課飛彈發射高度為207的時候,之後還可以再攔截2可飛彈,而發射高度為300,之後可攔截4顆飛彈;故第一問該系統最多能攔截多少飛彈,能是問該序列的最大遞減序列的長度是多少;

攔截所有飛彈最少要配備的飛彈系統數目?我們什麼時候需要重新配備該系統呢?之前的飛彈系統發射不能攔截飛彈的時候,我們需要重新配備乙個系統,攔截飛彈,所以,所需系統數目則是該序列的最大遞增序列長度

#include#include#include#include#include#includeusing namespace std;

int main()

int num=atoi(str.substr(start,i-start).c_str());

vv.push_back(num);

start=i+1;

} //動態規劃,求解序列長度

//asc[i]:在i之前最長公升序序列長度

//des[i]:在i之前最長降序序列長度

//轉移方程

//jvv[i] asc[i]=max(asc[i],asc[j]+1);

vectorasc(vv.size(),1);

vectordes(vv.size(),1);

for(int i=0;ielse

}} int maxasc=0;//最大公升序序列長度

int maxdes=0;//最大降序序列長度

for(int i=0;icout

return 0;

}

藍橋杯 演算法訓練 攔截飛彈

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

藍橋杯題目練習 攔截飛彈

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

藍橋杯 演算法訓練 攔截飛彈

試題 演算法訓練 攔截飛彈 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系...