zoukankan      html  css  js  c++  java
  • HDU 1257 最少拦截系统

    题意:输入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 }
    View Code
  • 相关阅读:
    初步学习next.js-1-新建项目
    对象比较-深层,浅层
    制作右键菜单
    使用高德API-初级应用
    启动前后端连载方法
    使用websocket
    关于图片压缩
    归并排序(mergesort)
    冒泡排序
    递归介绍
  • 原文地址:https://www.cnblogs.com/--ZHIYUAN/p/5712847.html
Copyright © 2011-2022 走看看