HDU - 1257 最少拦截系统

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

Input

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

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

8 389 207 155 300 299 170 158 65

Sample Output

2

贪心思想,每次操作的都是尽可能的不去浪费防御系统的高度
有一条规则是确定的,就是如果后一枚导弹的高度比前一枚导弹要高的话,那么该套防御系统就不可用,需要部署一套新的或者放到其他的防御系统中去。需要注意的是,尽可能的不要浪费每套防御系统的高度。

类似于会场安排问题。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #include<math.h>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<stack>
 8 #include<deque>
 9 #include<iostream>
10 using namespace std;
11 typedef long long  LL;
12 int con[30009];
13 int bulb[30009];
14 int main()
15 {
16     int i,p,j,n,t;
17     while(scanf("%d",&n)!=EOF)
18     {
19         int num=0;
20         for(i=0;i<n;i++)
21             scanf("%d",&con[i]);
22         memset(bulb,0,sizeof(bulb));
23         bulb[num]=con[0];
24         for(i=1;i<n;i++)
25         {
26             for(j=0;j<=num;j++)
27             {
28                 if(con[i]<=bulb[j])
29                 {
30                     bulb[j]=con[i];
31                     break;
32                 }
33             }
34             if(j>num)
35                 bulb[++num]=con[i];
36         }
37         printf("%d\n",num+1);
38     }
39     return 0;
40 }
View Code

猜你喜欢

转载自www.cnblogs.com/daybreaking/p/9384335.html