成都dp總結之飛彈攔截(自己找的練習lg1020)

2021-08-21 10:31:05 字數 1359 閱讀 2695

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

輸入飛彈依次飛來的高度(雷達給出的高度資料是 \le 50000≤5

0000

的正整數),計算這套系統最多能攔截多少飛彈,如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

輸入格式:11

行,若干個整數(個數 \le 100000≤1

0000

0 )輸出格式:22

行,每行乙個整數,第乙個數字表示這套系統最多能攔截多少飛彈,第二個數字表示如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

輸入樣例#1:

複製

389 207 155 300 299 170 158 65

輸出樣例#1:

複製

6

2

為了讓大家更好地測試n方演算法,本題開啟spj,n方100分,nlogn200分

每點兩問,按問給分

分析:學了dp最長不上公升子串行,於是找了一道很早以前說要做卻沒有做的題目來練習。

有兩問,第一問我把它反轉了一下,然後做最長不上公升子串行。

第二問貪心吧。。。不知道我的複雜度是多少,竟然過了。

按理說正規貪心是列舉,然後加二分查詢,就是nlogn,

然而,我並沒有二分查詢,只是判斷停下來的位置,不斷地掃,直到全部掃完。

**如下:

#includeusing namespace std;

const int mm=100000;

const int inf=0x3f3f3f3f;

int f[mm+10];

int x;

int q;

int temp[mm+10];

int a[mm+10];

int hashh[mm+10];

int main()

memset(f,0x3f,sizeof(f));

for(int i=1; i<=q; i++)

for(int i=0; iint anss=lower_bound(f,f+q,0x3f3f3f3f)-f;

cout

int flag=0;

int pos=1;

int maxx=inf;

int ans=0;

while(cish!=q)

else}}

}///cout<<"ok"<}

cout

}

攔截飛彈(DP)

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

DP 攔截飛彈

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

南陽79 飛彈攔截(DP)

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 某國為了防禦敵國的飛彈襲擊,發展中一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於等於前一發的高度。某天,雷達捕捉到敵國飛彈來襲。由於該系統還在試用階段,所以只...