洛谷 P1020 飛彈攔截(動態規劃)

2021-08-16 17:24:35 字數 1162 閱讀 4586

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

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

輸入格式:

一行,若干個整數(個數少於100000)

輸出格式:

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

輸入樣例#1:

389 207 155 300 299 170 158 65

輸出樣例#1:

6

2

題解:可以分為兩個問題,第乙個問題是找最長不上公升子串行,直接上板子即可,第二個是乙個結論,乙個序列裡面最少有多少最長不上公升序列等於求這個序列裡最長上公升序列的長度,那麼也就是求乙個最長上公升子串行和最長不上公升子串行的長度即可。

ac**:

/*

* @author: 王文宇

* @date: 2018-03-06 15:10:01

* @last modified by: 王文宇

* @last modified time: 2018-03-06 16:30:06

*/#include using namespace std;

const int maxn = 100007;

#define _for(i,a,b) for(int i=a;i<=b;i++)

int n,a[maxn],dp1[maxn],dp2[maxn];

int check(int x,int y)

else l = mid+1;

} return ans;

}int main(int argc, char const *argv)

else

}dp2[1]=a[1];

int ans2 = 1;

_for(i,2,num-1)

else

}cout

}

洛谷P1020 飛彈攔截

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

洛谷 P1020 飛彈攔截

題目大意 對於乙個飛彈攔截系統 它的第一發炮彈能夠攔截任意高度的飛彈,但之後攔截的每一發炮彈都不能高於前一發的高度。輸入n發飛彈依次飛來的高度a i 計算這套系統最多能攔截多少飛彈,如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。1 n 100 0 a i 30000 題解 p i 表示攔截了第...

洛谷 P1020 飛彈攔截

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