某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
Input输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)
Output对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统.
Sample Input
8 389 207 155 300 299 170 158 65
Sample Output
2
1 #include<iostream> 2 using namespace std; 3 #define MAX 30000 4 int a[MAX]; 5 int main() 6 { 7 int n; 8 while(cin >>n) 9 { 10 for (int i = 0; i < n; i++) 11 cin >> a[i]; 12 int mark[MAX] = { 0 }; 13 int cnt=0,kk=n; 14 while (kk) 15 { 16 int max = 30000; 17 for (int i = 0; i < n; i++) 18 { 19 if (a[i] <= max && !mark[i]) 20 { 21 max = a[i]; kk--; mark[i] = 1; 22 } 23 } 24 cnt++; 25 } 26 cout << cnt << endl; 27 } 28 return 0; 29 }
报告:刚开始的思路出现的问题,总是想着用优先队列解决去解决,后来发现这不同与牛奶问题;
后面又想了一些一堆不能证明的错误;
通过观看大佬的代码,可以通过多次遍历和标记的方法来解决