貪心演算法 一本通

2021-10-02 15:13:22 字數 1218 閱讀 4326

1322:【例6.4】攔截飛彈問題(noip1999)

時間限制: 1000 ms 記憶體限制: 65536 kb

提交數: 8465 通過數: 3237

【題目描述】

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

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

【輸入】

n顆依次飛來的高度(1≤n≤1000)。

【輸出】

要攔截所有飛彈最小配備的系統數k。

【輸入樣例】

389 207 155 300 299 170 158 65

【輸出樣例】

2【提示】

輸入:飛彈高度: 4 3 2

輸出:飛彈攔截系統k=1

分析:貪心演算法,對於系統來說系統盡量開得少,對於每個系統攔截飛彈來說,盡量攔截較高(多)的飛彈。

開乙個陣列,記錄每個系統能攔截的最低的飛彈;然後每來乙個飛彈就要從已經開的系統中找出乙個能攔截飛彈的高度比他大的且差值最小的,因為你不能讓當前能攔截較高飛彈的系統攔截這個飛彈,你只需乙個個將兒能攔住他的就行;如果能找到,修改這個系統能攔截的

最低高度,如果不能再開乙個系統,將當前系統能攔截的飛彈高度賦值給這個飛彈的高度

```cpp

#include#include#includeusing namespace std;

const int n = 1010;

int a[n]=;//每個系統當前攔截的最低高度

int h[n]=;//每個飛彈的高度

int main()

int k=1; //設定第一套預設值為1

int short1,j=1;//最低高度

h[k]=a[1]; //初始化第乙個高度賦值

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

}if(short1==0)//找不到能攔截的系統

else h[short1]=a[i];//能找到攔截的系統,修改它能攔截的高度

} cout

}

佇列(一本通)

這道題重點是關係的轉換和初始化 include include include includeusing namespace std int a 101 記錄接著的的那個節點 int n,m int main int ans void bfs int x,int y int main cout in...

貪心 一本通 1 1 練習 2 數列分段

雖然題目標註的是貪心,但是,我覺得,用動態規劃可能會更簡單一點。令dp i 代表從1開始到第i個結束最少要分成的段數。n 5,m 6。a陣列下標 dp陣列41 1221 4325 4315 3ans dp n 3 如果sum a i m,則dp i sp i 1 sum a i 否則,dp i dp...

情感修煉一本通

實踐準則 經驗親密關係構成要素 了解 關心 相互依賴性 相互一致性 信任以及承諾 親密的伴侶彼此間有著廣泛而私密的了解。他們熟知彼此的經歷 愛好 情感和心願,而且一般不會把這些資訊透露給其他人。親密的伴侶關心對方,彼此能從對方身上感受到更多的關愛。如果人們認為自己的伴侶了解 理解並欣賞自己,其親密程...