题意:输入n然后输入n个不大于30000的数,代表n个导弹飞来的高度,要依次拦截所有的导弹,系统每拦截一个导弹那么下一次能够拦截的导弹的高度就不能高于这次的,问最少要多少个拦截系统才能成功拦截所有的导弹
题解:
1 /* 2 对于某一个时间点飞来的导弹如果能够使用已有的系统来拦截,那么就一定会比新增加一个系统来拦截它更好 3 因此考虑贪心,能用已有的就用已有的并且用可以拦截的最低高度的系统,不能拦截就新增加一个系统。 4 */ 5 #include <iostream> 6 7 using namespace std; 8 9 int sys[10004]; 10 int main() 11 { 12 int n; 13 while (cin >> n) { 14 int m = 0; 15 sys[0] = 30000; 16 for (int i = 0; i < n; ++i) { 17 int x, k = 0; 18 cin >> x; 19 for (int j = 1; j <= m; ++j) { 20 if (x > sys[j]) continue; 21 else if (sys[j] < sys[k]) k = j; 22 } 23 if (k == 0) sys[++m] = x; 24 else sys[k] = x; 25 } 26 cout << m << endl; 27 } 28 return 0; 29 }