zoukankan      html  css  js  c++  java
  • hdu 1257 最少拦截系统(贪心)

    解题思路:【要充分理解题意,不可断章取义】

    贪心:每个防御系统要发挥其最大性能,

    举例:

     Input : 9 389 207 155 300 299 170 155 158 65

    Output: 2

    不是后者大于前者便部署一个新的防御系统,而是充分发挥所有防御系统的性能。

    倒数第三个数 155 ,这枚导弹完全可以被第一防御系统所拦截,所以用两个系统便可以防御所以导弹。

    先给出AC代码:

    #include<stdio.h>
    int narr[10003];
    int main(void)
    {
        int n,i,k,flag,h;
        while(scanf("%d",&n)!=EOF&&n)
        {
            k=0;
            for(i=0; i<n; i++)
                scanf("%d",&narr[i]);
            while(1)
            {
                h=30005;
                flag=0;
                for(i=0; i<n; i++)
                {
                    if(narr[i]<=h&&narr[i]>0)
                    {
                        h=narr[i];
                        flag=1;
                        narr[i]=-1;
                    }
                }
                if(flag)k++;
                else break;
            }
            printf("%d
    ",k);
        }
        return 0;
    }
    

      代码解析:

    将所有导弹高度放入到一个数组中。

    从第一开始扫描,如果后一个小于前一个,且大于0,则向后递推扫描,同时将扫描过的数值重新赋值-1,遍历所有元素。如果没有元素了,则不会进入for中的if,则,flag不会被赋值1,说明所有元素都已遍历完,且都被赋值为-1。遍历完 k++;

     Input :    9 389 207 155 300 299 170 155 158 65

    第一遍扫描     -1   -1    -1                      -1         -1    -->k=1

    则数组中元素   -1   -1   -1 300 299  170  -1  158

    第二遍扫描                        -1    -1    -1         -1         -->k=2

    数组中元素以全为-1 不在进入 if 。flag=0;跳出while(1)循环。

    则 Output k 

  • 相关阅读:
    nginx 启用php解析及解决无法访问报错Primary script unknown的过程
    百度云服务器连接码云的坑
    async函数测试
    centos6.8安装mysql5.7及用navicat远程连接
    JavaScript模块知识理解
    为什么if else 语句里不能用函数声明定义函数,而可以用函数表达式定义函数
    Java8-对map过滤
    git cherry-pick 的使用
    Java8-对map排序
    Java8过滤器(Filter)
  • 原文地址:https://www.cnblogs.com/A--Q/p/5711354.html
Copyright © 2011-2022 走看看