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

2021-10-04 21:50:59 字數 1717 閱讀 1558

試題 演算法訓練 攔截飛彈

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

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

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

輸入格式

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

輸出格式

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

樣例輸入

389 207 155 300 299 170 158 65

樣例輸出62

演算法訓練 攔截飛彈

思路:一眼可以看出這是動態規劃演算法

總結一下此類問題動態規劃演算法:

這類問題都是所求次數根據資料轉換不斷的更新,那麼就很簡單,更新的話就需要兩個變數,第乙個i是不斷的往後面推

一直到最後乙個,另乙個是j從第乙個開始一直到i不斷的更新最多的或者是最少的當推算到最後乙個的時候就結束了

如果更新列表中i位置的數<=重新整理列表j位置的數字&&陣列中i位置的數字《陣列中j位置的數字,那麼可以打到的數字++

如果更新列表中i位置的數<=重新整理列表j位置的數字&&陣列中i位置的數字》陣列中j位置的數字,那麼可以需要的系統數++

其實就是最長遞減子串行和最長遞增子串行的問題

/*

演算法訓練 攔截飛彈

思路: 一眼可以看出這是動態規劃演算法

總結一下此類問題動態規劃演算法:

這類問題都是所求次數根據資料轉換不斷的更新,那麼就很簡單,更新的話就需要兩個變數,第乙個i是不斷的往後面推

一直到最後乙個,另乙個是j從第乙個開始一直到i不斷的更新最多的或者是最少的當推算到最後乙個的時候就結束了

如果更新列表中i位置的數<=重新整理列表j位置的數字&&陣列中i位置的數字《陣列中j位置的數字,那麼可以打到的數字++

如果更新列表中i位置的數<=重新整理列表j位置的數字&&陣列中i位置的數字》陣列中j位置的數字,那麼可以需要的系統數++

其實就是最長遞減子串行和最長遞增子串行的問題

*/#include

#include

#include

#include

#include

#include

#include

using

namespace std;

intmain()

fill

(dp, dp + cnt,1)

;int ans =0;

for(

int i =

1; i < cnt; i++)}

ans =

max(ans, dp[i]);

} cout << ans << endl;

fill

(dp, dp + cnt,1)

; ans =0;

for(

int i =

1; i < cnt; i++)}

ans =

max(ans, dp[i]);

} cout << ans << endl;

return0;

}

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

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

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

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

藍橋杯 攔截飛彈

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