HDU 1257:最少拦截系统

Description

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

Input

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

Output

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

Sample Input

8 389 207 155 300 299 170 158 65
                

Sample Output

2
 
  
  刚做这个题时,以为很简单,导弹来了就打,高度不够就换个系统。
  后来想了想,这个应该是用贪心来做的,每次导弹来的时候都要检测之前的系统能不能用,不能一味的使用新系统。
  
  因此,这道题的正确思路应该是:导弹来了—》 检测之前的系统所能拦截高度—》发现有一个或多个可以使用—》使用与该导弹高度 相差最小的系统(贪心,性价比最高)——》更新刚刚使用的系统的高度至刚刚拦截的导弹的高度。
  
  若来的导弹 大于所有已存在的拦截系统的最低高度,则使用新的拦截系统,更新此系统的最低高度至此枚导弹的高度。
 
 
 1 #include<stdio.h>

 2 #define M 9999999

 3 

 4 int main()

 5 {

 6     int i,k,n,high,cnt,mini,min[10010],minNum;

 7     int flag1,flag2;

 8 

 9     while(scanf("%d",&n)!=EOF)

10     {

11         cnt = 0;

12         flag1 = 0;

13         for(k=0;k<n;k++)

14         {

15             scanf("%d",&high);

16             if(flag1==0)

17             {

18                 cnt = 1;

19                 flag1 = 1;

20                 min[cnt] = high;

21                 continue;

22             }

23             flag2 = 0;

24             minNum = M;

25             for(i=1;i<=cnt;i++)

26             {

27                 if(min[i]-high<0)

28                     continue;

29                 if(min[i]<minNum)

30                     {

31                         minNum = min[i];

32                         mini = i;

33                     }

34                 if(i==cnt)

35                     {

36                         min[mini]=high;

37                         flag2 = 1;

38                     }

39             }

40             if(flag2==0)

41             {

42                 cnt++;

43                 min[cnt]=high;

44             }

45         }

46         printf("%d\n",cnt);

47     }

48     return 0;

49 }

 

你可能感兴趣的:(HDU)