您的位置:首页 > 其它

防卫导弹

2016-05-15 01:16 246 查看
描述

一种新型的防卫导弹可截击多个攻击导弹。它可以向前飞行,也可以用很快的速度向下飞行,可以毫无损伤地截击进攻导弹,但不可以向后或向上飞行。但有一个缺点,尽管它发射时可以达到任意高度,但它只能截击比它上次截击导弹时所处高度低或者高度相同的导弹。现对这种新型防卫导弹进行测试,在每一次测试中,发射一系列的测试导弹(这些导弹发射的间隔时间固定,飞行速度相同),该防卫导弹所能获得的信息包括各进攻导弹的高度,以及它们发射次序。现要求编一程序,求在每次测试中,该防卫导弹最多能截击的进攻导弹数量,一个导弹能被截击应满足下列两个条件之一:

a)它是该次测试中第一个被防卫导弹截击的导弹;

b)它是在上一次被截击导弹的发射后发射,且高度不大于上一次被截击导弹的高度的导弹。

输入

多个测例。

每个测例第一行是一个整数n(n不超过100),第二行n个整数表示导弹的高度(数字的顺序即发射的顺序)。

n=0表示输入结束。

输出

每个测例在单独的一行内输出截击导弹的最大数目。

输入样例

5

5 6 100 6 61

0

输出样例

2

#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXSIZE 1000

using namespace std;

int main()
{
int n,i,j,res;
int A[MAXSIZE],len[MAXSIZE];
scanf("%d",&n);
while(n){
if(n==0)break;
memset(len,0,sizeof(len));
for(i=n;i>0;i--){
scanf("%d",&A[i]);
}
len[1] = 1;
for(i=2;i<=n;i++){
len[i]=1;
for(j=1;j<i;j++)
{
if(A[j]<=A[i]&&len[j]+1>len[i]){
len[i] = len[j]+1;
}
}
}
res = len[1];
for(i = 2;i<=n;i++){
if(len[i]>res) res = len[i];
}
printf("%d\n",res);
scanf("%d",&n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: