• nyoj 814 又见拦截导弹


    又见拦截导弹

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度。突然有一天,雷达捕捉到敌国的导弹来袭。由于该系统存在缺陷,所以如果想把所有的导弹都拦截下来,就要多准备几套这样的导弹拦截系统。但是由于该系统成本太高,所以为了降低成本,请你计算一下最少需要多少套拦截系统。

     
    输入
    有多组测试数据。
    每组数据先输入一个整数N(N≤3000),代表有N发导弹来袭。接下来有N个数,分别代表依次飞来的导弹的导弹的高度。当N=-1时表示输入结束。
    输出
    每组输出数据占一行,表示最少需要多少套拦截系统。
    样例输入
    8
    389 207 155 300 299 170 158 65
    5
    265 156 123 76 26
    样例输出
    2
    1
     1 /**
     2     分析:
     3         Ⅰ、我们需要把加入的防导弹系统的最高距离实时记录
     4         Ⅱ、遍历该系统找出满足条件的防导弹系统并更新其最高距离
     5             Ⅱ ( ②) 若所有防导弹没有符合条件的就要以刚输入的距离重新加入一个系统
     6             
     7     核心代码:
     8         for (i = 1; i < k; ++ i) {
     9             if (A [i] >= num) {
    10                 A[i] = num;
    11                 break;
    12             }
    13         } 
    14         if (i == k) {
    15             A[k ++] = num;
    16         }
    17 **/

    C/C++代码实现(AC):

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int n;
     6 
     7 int main () {
     8     while (~scanf ("%d", &n), n != -1) {
     9         int A [3005], k = 1, i, num;
    10         while (n --) {
    11             scanf ("%d", &num);
    12             for (i = 1; i < k; ++ i) {
    13                 if (A [i] >= num) {
    14                     A [i] = num;
    15                     break;
    16                 }
    17             }
    18             if (i == k) {
    19                 A [k ++] = num;
    20             }
    21         }
    22         printf ("%d
    ", k - 1);
    23     }
    24 } 
  • 相关阅读:
    前端
    wampserver无法进入到phpmyadmin
    wordpress搭载wampserver上的问题
    电脑不显示网络信号,却能连上网
    读书TODO
    秒杀活动,怎么设计全套技术方案
    淘宝返利知识普及
    如何给变量命名
    一段SQL代码的压缩:从974行到96行,十倍压缩
    nginx一致性hash及应用场景。
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/8983034.html
Copyright © 2020-2023  润新知