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