zoukankan      html  css  js  c++  java
  • HDU

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

    Input

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

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

    8 389 207 155 300 299 170 158 65

    Sample Output

    2

    贪心思想,每次操作的都是尽可能的不去浪费防御系统的高度
    有一条规则是确定的,就是如果后一枚导弹的高度比前一枚导弹要高的话,那么该套防御系统就不可用,需要部署一套新的或者放到其他的防御系统中去。需要注意的是,尽可能的不要浪费每套防御系统的高度。

    类似于会场安排问题。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<stack>
     8 #include<deque>
     9 #include<iostream>
    10 using namespace std;
    11 typedef long long  LL;
    12 int con[30009];
    13 int bulb[30009];
    14 int main()
    15 {
    16     int i,p,j,n,t;
    17     while(scanf("%d",&n)!=EOF)
    18     {
    19         int num=0;
    20         for(i=0;i<n;i++)
    21             scanf("%d",&con[i]);
    22         memset(bulb,0,sizeof(bulb));
    23         bulb[num]=con[0];
    24         for(i=1;i<n;i++)
    25         {
    26             for(j=0;j<=num;j++)
    27             {
    28                 if(con[i]<=bulb[j])
    29                 {
    30                     bulb[j]=con[i];
    31                     break;
    32                 }
    33             }
    34             if(j>num)
    35                 bulb[++num]=con[i];
    36         }
    37         printf("%d
    ",num+1);
    38     }
    39     return 0;
    40 }
    View Code
  • 相关阅读:
    java枚举常见用法
    redis初使用
    Linux上搭建svn资源库
    redis集群创建
    大数据学习之Hadoop运行模式
    集群时间同步
    ssh免密登录
    mvc项目问题清单以及解决方法
    Memcached分布式缓存初体验
    Asp.Net 一个请求的处理流程
  • 原文地址:https://www.cnblogs.com/daybreaking/p/9384335.html
Copyright © 2011-2022 走看看