PKU-攔截導彈
阿新 • • 發佈:2018-11-02
題目連結
題目描述
某國為了防禦敵國的導彈襲擊,開發出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲,並觀測到導彈依次飛來的高度,請計算這套系統最多能攔截多少導彈。攔截來襲導彈時,必須按來襲導彈襲擊的時間順序,不允許先攔截後面的導彈,再攔截前面的導彈。
輸入描述:
每組輸入有兩行,
第一行,輸入雷達捕捉到的敵國導彈的數量k(k<=25),
第二行,輸入k個正整數,表示k枚導彈的高度,按來襲導彈的襲擊時間順序給出,以空格分隔。
輸出描述:
每組輸出只有一行,包含一個整數,表示最多能攔截多少枚導彈。
示例1
輸入
8
300 207 155 300 299 170 158 65
輸出
6
題解:DAG模型。
#include <iostream> #include <vector> #include <cmath> using namespace std; int main(){ int n; while (cin >> n){ int ans = 1; vector<int> d(n, 0); vector<int> dp(n, 1); for (int i = 0; i < n; i++){ cin >> d[i]; } for (int i = 1; i < n; i++){ for (int j = 0; j < i; j++){ if (d[j] >= d[i]){ dp[i] = max(dp[i], dp[j] + 1); } } ans = max(ans, dp[i]); } cout << ans << endl; } return 0; }