最多拦截导弹数

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它能拦截任意高度的导弹,但是每拦截一发导弹,其拦截能力就下降只能拦截上一次拦截的导弹高度。某天,雷达捕捉到敌国的导弹来袭,导弹依次飞来,该拦截系统最多能拦截多少导弹呢?

Input:输入若干组数据。每组数据包括:导弹总个数(正整数<1000),导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)。若导弹个数为0,则处理结束。

Output:输出这套系统最多能拦截多少导弹。

#include<iostream>
using namespace std;
#define MAXLEN 100
int LIS_2(int a[],int n){
    int b[MAXLEN]={0};
    int i,j;
    b[0]=1;
    int max=0;
    for(i=1;i<n;i++){
        int k=0;
        for(j=0;j<i;j++)
            if(a[j]>=a[i]&&k<b[j])k=b[j];
            b[i]=k+1;
            if(max<b[i])max=b[i];
    }
    return max;
}
int main(){
    int n;
    int a[MAXLEN];
    cout<<"导弹数n=";
    cin>>n;
    cout<<"导弹高度:";
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    cout<<LIS_2(a,n)<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wanwu_fusu/article/details/83868765