問題 1264 防禦飛彈

2021-10-03 23:50:42 字數 1423 閱讀 7783

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

輸入最多20個整數,分別表示飛彈依次飛來的高度(雷達給出高度資料是不大於30000的正整數)

輸出整數m。表示:這套系統最多能攔截 m 枚飛彈.

樣例輸入

300 250 275 252 200 138 245

樣例輸出

5似乎是動態規劃

目的:尋找最長動態遞減數列

思路:動態規劃

進行外迴圈,表示,到第i個數字時,dp[i]表示當前產生的最大遞減數列的長度

當進行下乙個數字的時候,此時將該數字加到可能的數字後面,並計算各種可能情況的最大數列長度

判斷能夠得到乙個更長的數列的條件是:

num[j]>=num[i]:當前數不大於前乙個數

dp[i]bug1:進行讀取迴圈的時候,最後一遍是讀取eof,此時cnt進行自增,所以最終統計的數字的個數是cnt–個。

bug2:進行遞減數列的長度計算的時候,最後面加上的數字不大於前面的數字,所以是num[j]>=num[i]

bug2是真的沒想到,一直出現錯誤75%,就是不知道為什麼

#include

intmain()

,num[31]

=,maxlen,i,j,cnt=0;

while(~

scanf

("%d"

,&num[cnt++])

);cnt--

;//這個地方出現bug了,進行一次讀入cnt++,當讀到eof時,cnt也進行自增

for(i=

0;i)for

(i=1

,maxlen=dp[0]

;i(maxlen) maxlen=dp[i]

;printf

("%d\n"

, maxlen)

;return0;

}

#include

#include

typedef

struct linklink;

typedef

struct

tree;

intmain()

;int num=

0,maxlen=

0,n,i;

while(~

scanf

("%d"

,&n))}

if(i>num)

}printf

("%d\n"

, maxlen)

;return0;

}

防禦飛彈演算法

演算法效率的時間空間效率完全沒有考慮 大鳥無噴 但是可能是最直觀的,最白痴的思路。沒有運用 演算法思想,就是保證沒讀過演算法相關書籍的任何人都能讀懂。題目出處 題目如下 防禦飛彈 problem 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能...

飛彈防禦塔

freda的城堡遭受了 m 個入侵者的攻擊!freda控制著 n 座飛彈防禦塔,每座塔都有足夠數量的飛彈,但是每次只能發射一枚。在發射飛彈時,飛彈需要 t1 秒才能從防禦塔中射出,而在發射飛彈後,發射這枚飛彈的防禦塔需要 t2 分鐘來冷卻。所有飛彈都有相同的勻速飛行速度 v,並且會沿著距離最短的路徑...

飛彈防禦系統

飛彈防禦系統 為了對抗附近惡意國家的威脅,r國更新了他們的飛彈防禦系統。一套防禦系統的飛彈攔截高度要麼一直嚴格單調上公升要麼一直嚴格單調下降。資料範圍 1 n 50 輸入樣例 5 3 5 2 4 1 0輸出樣例 2樣例解釋 對於給出樣例,最少需要兩套防禦系統。一套擊落高度為3,4的飛彈,另一套擊落高...