第九章 動態規劃-1289:攔截導彈

1289:攔截導彈

時間限制: 1000 ms 內存限制: 65536 KB
提交數: 3939 通過數: 2604
【題目描述】
某國爲了防禦敵國的導彈襲擊,發展出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的導彈。

輸入導彈依次飛來的高度(雷達給出的高度數據是不大於30000的正整數),計算這套系統最多能攔截多少導彈。

【輸入】
第一行是一個整數N(不超過15),表示導彈數。

第二行包含N個整數,爲導彈依次飛來的高度(雷達給出的高度數據是不大於30000的正整數)。

【輸出】
一個整數,表示最多能攔截的導彈數。

【輸入樣例】
8
389 207 155 300 299 170 158 65
【輸出樣例】
6


思路:求最大下降子序列的長度

#include<iostream>
#include<cstdio>
#include<algorithm>
#define INF 0x3f3f3f3f
#define N 1001
using namespace std;

int a[N],f[N];
int main()
{
    int n;
    cin >> n;
    for(int i = 1;i <= n;i++)
        cin >> a[i];
 
    int maxx = -INF;
    for(int i = 1;i <= n;i++)
    {
        f[i] = 1;
        for(int j = 1;j < i;j++)
            if(a[j] >= a[i] && f[j]+1 > f[i])
                f[i] = f[j]+1;
        maxx = max(maxx,f[i]);
    }
    cout << maxx << endl;
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章