首页 > 其他分享 >导弹防御系统

导弹防御系统

时间:2023-05-20 09:03:41浏览次数:38  
标签:up int 系统 mid su 导弹 防御 ans sd

传送门

这道题与 拦截导弹 类似,就是需要套一个爆搜,由于 \(n\) 很小,所以是不是用二分优化问题不大,这里是 \(O(n2^n)\),可以优化成 \(O(\log_2n2^n)\)。

#include<bits/stdc++.h>
using namespace std;
int ans,n,up[51],down[51],q[51];
void dfs(int u,int su,int sd){
    if(su+sd>=ans)return;
    if(u==n){
        ans=su+sd;
        return;
    }
    int k=0;
    while(k<su&&up[k]>=q[u])++k;
    int t=up[k];
    up[k]=q[u];
    if(k<su)dfs(u+1,su,sd);
    else dfs(u+1,su+1,sd);
    up[k]=t;
    k=0;
    while(k<sd&&down[k]<=q[u])++k;
    t=down[k];
    down[k]=q[u];
    if(k<sd)dfs(u+1,su,sd);
    else dfs(u+1,su,sd+1);
    down[k]=t;
}
int main(){
    while(cin>>n,n){
        for(int i=0;i<n;++i)cin>>q[i];
        ans=n;
        dfs(0,0,0);
        cout<<ans<<endl;
    }
    return 0;
}

y总的优化代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N = 60;
int down[N], up[N], q[N], n;
int res;

void dfs(int u, int su, int sd)
{
    if (su + sd >= res) return;
    if (u == n)
    {
        res = min(res, su + sd);
        return;
    }

    int l = 0, r = su;
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (up[mid] >= q[u]) l = mid;
        else r = mid - 1;
    }
    // 注意这里是<= su,因为这里up[]从下标1开始用,y总版本k < su是因为up[]从下标0开始用
    if (r + 1 <= su)    
    {
        int t = up[r + 1];
        up[r + 1] = q[u];
        dfs(u + 1, su, sd);
        up[r + 1] = t;
    }
    else
    {
        up[r + 1] = q[u];
        dfs(u + 1, su + 1, sd);
    }

    l = 0, r = sd;
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (down[mid] <= q[u]) l = mid;
        else r = mid - 1;
    }
    if (r + 1 <= sd)
    {
        int t = down[r + 1];
        down[r + 1] = q[u];
        dfs(u + 1, su, sd);
        down[r + 1] = t;
    }
    else
    {
        down[r + 1] = q[u];
        dfs(u + 1, su, sd + 1);
    }
}


int main()
{
    up[0] = 2e9, down[0] = -2e9;

    while (scanf("%d", &n), n)
    {
        for (int i = 0; i < n; i++) scanf("%d", &q[i]);

        res = n;
        dfs(0, 0, 0);

        printf("%d\n", res);
    }


    return 0;
}

标签:up,int,系统,mid,su,导弹,防御,ans,sd
From: https://www.cnblogs.com/wscqwq/p/17416717.html

相关文章

  • 基于PSO优化的OFDM系统PAPR抑制PTS算法MATLAB仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要       部分传输序列(PartialTransmitSequence,PTS)由于其不受载波数量限制,并且能够有效的,无失真的降低OFDM信号峰均比,而受到广泛关注。部分传输序列算法(PTS)最初是由S.H.Muller和J.B.H......
  • 推荐系统系列之推荐系统概览(下)
    在推荐系统概览的第一讲中,我们介绍了推荐系统的常见概念,常用的评价指标以及首页推荐场景的通用召回策略。本文我们将继续介绍推荐系统概览的其余内容,包括详情页推荐场景中的通用召回策略,排序阶段常用的排序模型,推荐系统的冷启动问题和推荐系统架构,更多细节以及更详细的内容可以参......
  • 在Centos7上安装PXE装机环境来批量安装操作系统
    步骤1:安装必要的软件包首先,需要确保系统已安装dhcp、tftp-server和httpd等软件包。可以使用以下命令进行安装:yuminstall-ydhcptftp-serverhttpdsyslinux-tftpbootxinetd步骤2:配置DHCP服务器接下来,需要配置DHCP服务器以向客户端分配IP地址。在/etc/dhcp/d......
  • 操作系统概论
    theme:github一、操作系统的概念计算机操作系统定义:计算机系统是计算机硬件、软件以及周边设备的整体,用于完成各种信息处理任务的机器系统。计算机系统的分类:计算机系统广义上分为:机械系统和电子式系统(电子系系统又分为:数字式、模拟式)计算机系统的层次结构:计算机系统由......
  • 会声会影2023旗舰版系统配置要求,会声会影序列号能用多少次
    会声会影2023旗舰版(CorelVideoStudio2023)是Corel旗下一款功能强大的专业视频制作软件的视频编辑软件及视频剪辑软件.会声会影2023旗舰版,可以用于剪辑合并视频,制作视频,屏幕录制,光盘制作,视频后期编辑,添加特效,字幕和配音等操作,无需专业的视频编辑知识,任何人都能快速上手.......
  • C++图书信息管理系统系统[2023-05-19]
    C++图书信息管理系统系统[2023-05-19]图书信息管理系统系统问题描述本图书信息管理系统包括图书的编号、书名、作者、分类号、出版单位、出版时间和价格,可实现新建图书信息管理文件,录入图书信息,查询图书信息,删除图书信息,浏览图书信息。类的设计:classreader//读者类class......
  • java基于springboot+vue的漫画网站管理系统,附源码+数据库+lw文档+PPT,适合毕业设计、课
    1、项目介绍考虑到实际生活中在漫画网站方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。(a)管理员;管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、漫画分类管理、漫画投稿管理、分类管理、排行榜管理、交流论坛、系统管理等功能......
  • 单片机的裸机系统和多任务系统总结
    一、裸机系统1.1轮询系统 轮询系统是裸机编程时,先初始化好相关硬件,然后让主程序在一个死循环内不断循环,顺序完成各种事情。伪代码如下所示:1intmain(void)2{3/*硬件相关初始化*/4HardWareInit();56/*无限循环*/7for(;;){8......
  • Nacos 核心原理解读+高性能微服务系统实战
    Nacos核心原理解读+高性能微服务系统实战download:3w51xuebccom《模拟人生4》(TheSims4)是一款由Maxis和TheSimsStudio开发,由ElectronicArts发行的模拟人生游戏。它被广泛认为是模拟人生系列中最好玩的一部分。本文将向您介绍TS4的入门知识。TS4的基本概念在TS4中,你可以创建......
  • Linux基础22 进程的优先级nice, 后台进程管理, 系统平均负载, 系统启动流程
    进程的优先级:nice值越高:表示优先级越低,例如19,该进程容易将CPU使用量让给其他进程。nice值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。#以设定的优先级启动nice-n-10tail-f/var/log/messages#重新设置一个进程的优先级(调整sshd的优先级)[root@oldboyedu~]#......