1250 导弹拦截问题

题目描述

 某国为了防御敌国的导弹袭击,研发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不 能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试验阶段,因此1套系统可能不能拦截所有的导弹。 

输入

 输入数据只有一行,数据之间用空格隔开,表示导弹依次飞来的高度(<=100 枚,<=30000 )。 

输出

一个数据,该数据表示若要拦截所有导弹至少要多少套这样的系统。

样例输入

300 150 120 540 360 471 140 364 146 340

样例输出

4

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int main()
{
	int i,j,b,n=0;
	int a[110];//发射过来的导弹高度
	int h[110];//拦截系统可以拦截的最大高度
	while(scanf("%d",&b)!=EOF)
	{
		a[n++]=b;//由于不知道有多少数据输入
		if(getchar()=='\n')
		break;//判断是否输入完毕,我一开始就是没有这一步卡了半天
	}
	for(i=0;i<n;i++)
	{
		h[i]=30000;//使拦截系统可以拦截的初始高度设为最大值
	}
	for(i=0;i<n;i++)
	{
		for(int j=0;j<=i;j++)
		{
			if(h[j]>=a[i])
			{
				h[j]=a[i];//可以拦截
				break;
			}
		}
	}
	int ans=0;
	for(i=0;i<n;i++)
	{
		if(h[i]!=30000)
		{
			ans++;//一旦不等于最大值,说明导弹系统被用过
		}
	}
	printf("%d\n",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/S123KO/article/details/88962980