8.最少拦截系统——贪心贪心~

又是一道贪心的题,它折磨了我很久,一开始我并没有读懂题,把题目给的数据sort了一遍,发现一套拦截系统就可以拦截所有的导弹,后来发现必须按照样例顺序进行拦截(这显然不符合生活规律啊!!)但是这样就简单了,我暴力了一下,发现时间超限,后来一直时间超限,于是去找了题解,依旧时间超限!!!!za!后再来我的师姐讲了一下,我发现她的思路和我一样,然而她的就不时间超限。。。。可能也看脸吧  =_=!!。

那我们直接看题干:

Description

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统. 

Input

输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔) 

Output

对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统. 

Sample Input

 

8 389 207 155 300 299 170 158 65

Sample Output

 

2

题目叙述已经很详细了,我就简单说一下我咋想的就好,先用一个系统依次拦截,设置一个变量用来记录当前系统能够拦截的最大高度(其实就是上一个数据),如果后一个数大于此变量,那么就重新启动一套防御系统。是不是比较简单呢~~,但是这个方法只适用于后台比较水的哦~~因为这个方法好想,但是有漏洞,大家因为前一套防御系统其实还是可用的,比如第一套目前的最高拦截是100,第二套目前的是300,来了一个高度是90的炮弹,这时你用哪个?当然是第一套啊,用第二套太浪费了!!!

那我们还是直接看代码吧:

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
    int i,j,k,a[2000],n,sum=0,t;
    while(scanf("%d",&n)!=EOF)
    {
        sum=0;
        for(i=0;i<=n-1;i++)
            scanf("%d",&a[i]);
        for(i=0;i<n;i++)
        {
            if(a[i]!=0)
            {
                sum++;
                t=a[i];
                for(j=i+1;j<n;j++)
                {
                    if(a[j]<t&&a[j]!=0)
                    {
                        t=a[j];
                        a[j]=0;
                    }
                }
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41886231/article/details/81188501