zoukankan      html  css  js  c++  java
  • 【ACM】拦截导弹

    拦截导弹

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

    某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于等于前一发的高度。某天,雷达捕捉到敌国导弹来袭。由于该系统还在试用阶段,所以只用一套系统,因此有可能不能拦截所有的导弹。

     
    输入
    第一行输入测试数据组数N(1<=N<=10)
    接下来一行输入这组测试数据共有多少个导弹m(1<=m<=20)
    接下来行输入导弹依次飞来的高度,所有高度值均是大于0的正整数。
    输出
    输出最多能拦截的导弹数目
    样例输入
    2
    8
    389 207 155 300 299 170 158 65
    3
    88 34 65
    样例输出
    6
    2

    思路:0-1背包问题

     
    #include <iostream>
    using namespace std;
    
    int p[25];
    int big = 0;
    
    void Cal(int *a, int n, int k){
    
        if (k==n)
        {
            int count = 0;
            int cur,z;
            for (z = 0 ; z < n; z++)
            {
                if (a[z]==1)
                {
                    cur = p[z];
                    count++;
                    break;
                }
            }
            for (int i = z+1 ; i < n ; i++)
            {
                if (a[i]==1 && p[i]<cur)
                {
                    count++;
                    cur = p[i];
                }
            }
            if (count >= big)
            {
                big = count;
            }
            return;
        }
        a[k] = 1;
        Cal(a,n,k+1);
        a[k] = 0;
        Cal(a,n,k+1);
    
    }
    
    int main(){
    
        int n;
        cin>>n;
        while (n--)
        {
            int m;
            big = 0;
            cin>>m;
            int *b = new int[m];
            for (int i = 0 ; i < m ; i++)
            {
                cin>>p[i];
            }
            Cal(b,m,0);
            cout<<big<<endl;
        }
    
        return 0;
    }        
  • 相关阅读:
    岩石圈
    地球及其圈层结构
    如何请教一个技术问题
    中国游戏路在何方?
    5.4删除二叉搜索树的任意元素
    5.3 删除二叉搜索树的最大元素和最小元素
    uni-app开发小程序准备阶段
    5.2二叉搜索树遍历(前序、中序、后序、层次、广度优先遍历)
    5.1二叉搜索树基础
    【loj
  • 原文地址:https://www.cnblogs.com/lyc94620/p/9289314.html
Copyright © 2011-2022 走看看