美文网首页
贪心算法二 导弹拦截问题 noip1999

贪心算法二 导弹拦截问题 noip1999

作者: 徐慵仙 | 来源:发表于2020-02-24 22:57 被阅读0次

题目

某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段。所以一套系统有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度不大于30000的正整数)。计算要拦截所有导弹最小需要配备多少套这种导弹拦截系统。
【输入格式】
n颗依次飞来的高度(1≤n≤1000).
【输出格式】
要拦截所有导弹最小配备的系统数k。
【输入样例】missile.in
389 207 155 300 299 170 158 65
【输出样例】missile.out
2
【输入输出样例】
输入:导弹高度: 7 9 6 8 5
输出:导弹拦截系统K=2
输入:导弹高度: 4 3 2
输出:导弹拦截系统K=1

简析

我们设定一个数组b来保存每套系统当前的最低高度,如b[1]表示的就是第一套系统的最低高度。对于每一个来袭的导弹,我们找到一个最符合条件的(贪心)即可。
那么如何找到呢?

  • 如果ai< b[j] (j表示当前判断的是第几套),则这个导弹可以被此套系统拦截,此时又分两种情况:

    • 当前来袭还没分配,分配给这一套系统,p=j;
    • 已经分配了给某系统,判断哪个更小,如1系统500,2系统400,此时来袭导弹高度390,那么我们肯定要分配给400那套系统去拦截。

代码

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int a[1001];
    int b[1001];
    int k,n,p;
    cin>>n;
    for(int i=1;i<=n;i++){//输入
        cin>>a[i];
    }
    b[1]=a[1];//初始化,第一个导弹放第一组
    k=1;//初始化,一套导弹系统
    for(int i=2;i<=n;i++){
        p=0;
        for(int j=1;j<=k;j++){//看能不能使用已有的导弹系统
            if(b[j]>a[i]){//这套系统大于a[i]的a高度
                if(p==0) p=j;//p还没有指定
                else if(b[j]<b[p]) p=j;
            }
        }
        if(p==0){//没找到能用的
            k++;
            b[k]=a[i];
        }else{
            b[k]=a[i];
        }
    }
    cout<<k<<endl;
    return 0;
}

相关文章

  • 贪心算法二 导弹拦截问题 noip1999

    题目 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任...

  • 求最长升序(降序)子数列

    第一次接触到求最长升序(降序)子数列这个知识是在导弹拦截问题中,导弹拦截问题如下: 题意:一种导弹拦截系统的第...

  • 洛谷P1020 导弹拦截(线性DP)

    P1020导弹拦截传送门 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个...

  • 【算法打卡60天】Day29贪心算法:如何用贪心算法实现Huff

    Day29学习内容 :贪心算法:如何用贪心算法实现Huffman压缩编码? 1.如何理解贪心算法?贪心算法解决问题...

  • 导弹拦截

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K 一、题目内容...

  • 【数据结构】贪心算法和动态规划

    动态规划和贪心算法都是用来求最优化问题,且二者都必须具有最有子结构。贪心算法可以解决的问题,动态规划都能解决,可以...

  • ACM 之 E - 最少拦截系统

    Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它...

  • 只需9步,直接拿下贪心算法

    今天为大家分享的是贪心算法。 贪心算法:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选...

  • 可用贪心算法解决的几个基本问题

    可用贪心算法解决的几个基本问题 关键:看问题有没有贪心选择性质和最优子结构性质。有些问题看似是可以用贪心算法,但是...

  • 算法理论 | 贪心算法

    贪心算法 贪心算法,又称贪婪算法(Greedy Algorithm),是指在对问题求解时,总是做出在当前看来是最好...

网友评论

      本文标题:贪心算法二 导弹拦截问题 noip1999

      本文链接:https://www.haomeiwen.com/subject/mddgqhtx.html