最少攔截系統

2021-10-02 09:31:19 字數 2019 閱讀 1399

最少攔截系統

問題描述 :

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能達到前一發的高度。

某天,雷達捕捉到敵國的飛彈來襲,如果系統數量太少,將導致有可能不能攔截所有的飛彈。所以,根據雷達捕捉到的飛彈高度,需要預先準備相應數量的攔截系統。

比如飛彈的高度依次為:

5 3 4 2 4 1

則乙個攔截系統的第一發炮彈必須打到高度5的地方,第二發炮彈打到高度3的地方。

但第三發炮彈打不到高度4的地方(因為每一發炮彈不能達到前一發的高度),所以要使用第二套攔截系統。

第二套攔截系統發射的炮彈高度打到4和2的高度(實際上,要攔截高度為2的炮彈,使用第一套攔截系統或者第二套都可以),

第三套攔截系統發射的炮彈高度打到4和1的高度(實際上,要攔截高度為1的炮彈,三套攔截系統都可以)。

因此,總共需要三套攔截系統。

再比如飛彈的高度依次為:

5 3 4 2 3 1

則乙個攔截系統的第一發炮彈必須打到高度5的地方,第二發炮彈打到高度3的地方。

但第三發炮彈打不到高度4的地方(因為每一發炮彈不能達到前一發的高度),所以要使用第二套攔截系統。

第二套攔截系統發射的炮彈高度打到4的高度。

再要攔截高度為2的炮彈,使用第一套攔截系統或者第二套都可以,但考慮到後面還需要攔截炮彈,我們這裡使用第一套攔截系統(為什麼不能用第二套,自己想啦)。

再要攔截高度為3的炮彈,我們使用第二套攔截系統。

再攔截高度為1的炮彈,第一套和第二套系統都可以,我們就使用第二套吧。

因此,總共僅需要兩套攔截系統,第一套攔截的是5 3 2,第二套攔截的是4 3 1。

請根據給定的高度資料,幫助計算一下最少需要多少套攔截系統。

輸入說明 :

輸入資料首先包括乙個整數t (1<=t<= 100),,表示測試資料的組數。

每組測試資料的第一行是乙個整數n(1<= n <= 1000),代表著飛彈總個數(正整數), 接下來用n個數字代表著飛彈依次飛來的高度,其中雷達給出的高度資料是不大於10000的正整數,用空格分隔。

輸出說明 :

對應每組資料輸出攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

每組輸出佔一行,行首與行尾無空格。

輸入範例 :

8  389 207 155 300 299 170 158 65

5  100 50 200 300 400

輸出範例 :

2  4

每輸入乙個值,就進行判斷,陣列中已有數值不是最小值就用最小值進行覆蓋;

例  1.

5(輸入)3 (比5小則覆蓋)1

改變後的陣列33

11 2.

33(輸入)4(陣列中沒有比4小的數)(則+1)11

2改變後的陣列33

4112

3.334

(輸入)2(判斷出第乙個比他大的數是3,則對系統為1的數值進行覆蓋) 保證當前系統對應的數值為最小11

2 改變後陣列22

4211

214.2

2423(同理)11

21改變後陣列22

3231

1212

2232

3111

212

1131

3111

2121

即最少系統數為2;

**:

#include int main()

}if (dp[i] == 0)

}dp[i] = max + 1;

}else}}

} int max = 0;

for (int i = 0; i < m; i++)

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

} return 0;

}

最少攔截系統

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

最少攔截系統

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

最少攔截系統

b 最少攔截系統 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能...