• HDOJ1257


    HDOJ1257

    最少拦截系统

    Problem Description

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

    Input

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

    Output

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

    Sample Input

    8 389 207 155 300 299 170 158 65

    Sample Output

    2

     

    //while(scanf("%d",&n),n) 和 while(scanf("%d",&n)&&n)通不过。。。

    //以下两个都AC了~不过总觉得第一个考虑的不完善~

    //从当前系统中找到能对付当前导弹的那个~(总觉得不完善)

    //HDOJ1257
    #include <stdio.h>
    int sys;//当前系统个数
    int cur[100000];//当前各个系统可以应付的高度
    int h[100000];//当前各个导弹的高度
    int main()
    {
    int n,i,j;
    while (scanf("%d",&n)!=EOF)
    {
    sys=1;
    for(i=0;i<n;i++)
    {
    scanf("%d",&h[i]);//读取当前导弹高度
    for (j=0;j<sys;j++)
    {
    if (cur[j] > h[i])//查询当前系统是否可以应付当前导弹
    {
    cur[j] = h[i];
    break;
    }
    }
    if (j==sys)//没有能打到当前导弹的系统,得增加一个
    cur[sys++]=h[i];
    }
    printf("%d\n",sys-1);
    }
    return 0;
    }

     //当前全部系统中和当前导弹高度最接近的那个~(这个OK、)

    //HDOJ1257
    #include <stdio.h>
    int sys;//当前系统个数
    int cur[100000];//当前各个系统可以应付的高度
    int h[100000];//当前各个导弹的高度
    int l;//最接近的系统
    int m;//最接近的系统和当前导弹的高度差
    int main()
    {
    int n,i,j;
    while (scanf("%d",&n)!=EOF)
    {
    sys=0;
    for(i=0;i<n;i++)
    {
    m=30000;
    scanf("%d",&h[i]);//读取第i个导弹高度
    for (j=0;j<sys;j++)
    {
    if (cur[j]>h[i] && cur[j]-h[i]<m)//查询当前系统与当前导弹最接近的
    {
    m = cur[j]-h[i];
    l = j;
    }
    }
    if (m==30000)//没有能打到当前导弹的系统,得增加一个
    cur[sys++]=h[i];
    else
    cur[l]=h[i];
    }
    printf("%d\n",sys);
    }
    return 0;
    }
    字节跳动内推

    找我内推: 字节跳动各种岗位
    作者: ZH奶酪(张贺)
    邮箱: cheesezh@qq.com
    出处: http://www.cnblogs.com/CheeseZH/
    * 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    最大子数组和问题的解
    【剑指Offer】46孩子们的游戏(圆圈中最后剩下的数)
    【剑指Offer】45扑克牌顺子
    【剑指Offer】44翻转单词顺序列
    【剑指Offer】43左旋转字符串
    【剑指Offer】42和为S的两个数字
    【剑指Offer】41和为S的连续正数序列
    【剑指Offer】40数组中只出现一次的数字
    【剑指Offer】39平衡二叉树
    【剑指Offer】38二叉树的深度
  • 原文地址:https://www.cnblogs.com/CheeseZH/p/2426440.html
Copyright © 2020-2023  润新知