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;
}