• 【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;
    }        
  • 相关阅读:
    HDU6470 ()矩阵快速幂
    O(1)乘法与快速乘O(log)
    imos 学习笔记五 抓拍 c#
    imos 学习笔记四 录像 c#
    imos 学习笔记三 下载指定时间段视频信息 c#
    imos学习笔记二 用户登录c#
    imos学习笔记一 sdk开发环境
    Hbase(nosql)体系结构有基本操作 笔记八
    zookeeper的安装与配置 笔记七
    mapReduce体系结构和各种算法 笔记六
  • 原文地址:https://www.cnblogs.com/lyc94620/p/9289314.html
Copyright © 2020-2023  润新知