【拦截导弹】

news2024/9/24 19:21:58

题目

在这里插入图片描述



​​ 题解

题解:1010. 拦截导弹(dp与贪心) - AcWing

我谈几点:

第一,由此复习了upper_bound和lower_bound函数

第二,由此学习了贪心方式求“最多分割不严格递减子序列的数目”和“最长不严格递减子序列的长度”

第三,了解到前者和“最长严格递增子序列的长度”问题的一致性



细节

int main()
{
    //cnt表示导弹系统数,len表示一个系统最多能拦截的导弹数
    int len = 0, cnt = 0;
    int a;
    while(cin >> a)
    {
        //pos1表示以a结尾的最长不升子序列长度-1
        int pos1 = upper_bound(f, f+len, a, greater<int>()) - f;
        if(pos1 == len) f[len ++] = a;
        else f[pos1] = a;

        int pos2 = lower_bound(g, g+cnt, a[i]) - g;
        if(pos2 == cnt) g[cnt ++] = a;
        else g[pos2] = a;
    }
    cout << len << endl;
    cout << cnt << endl;
    return 0;
}

第一个贪心:求最长不严格递减子序列长度

策略:如果 a 是最小,增加长度,放置于后;否则,与第一个较小值交换(因此 f f f 是 递减的)
f [ p o s 1 ] = a f[pos1] = a f[pos1]=a 对应长度为 p o s 1 + 1 pos1+1 pos1+1 的,以 a a a 结尾的最长不严格单调递减子序列,容易知道 f f f 是 递减的,因此传入 g r e a t e r < i n t > ( ) greater<int>() greater<int>(),同时为了得到第一个小于 a a a 的值的地址,采用 u p p e r    b o u n d upper\;bound upperbound

理解f[i]为什么被更新,明明按顺序不应该再被更新的啊: f [ i ] f[i] f[i] 要始终对应最优的序列,保持在一个最优的状态,也就是尽可能地让它的值最大,这样才能允许尽可能大的 a a a 值参与序列的组成。实际上它的更新,意味着原本的序列的一些值去掉了,来了一些新的值。

示例: 5 3 7 6

a值进入考虑f[0]f[1]
55(对应5)
353(对应5,3)
77(对应7)3
676(对应7,6)(比5,3序列状态优)

所以,不同的f之间没有必然联系。
每次都是把第一个较小值更新,就可以保证用以更新的值 a a a 一定只会比原对应序列的最后一个值大(前面的值可以借过来组成新序列)

第二个贪心:求最多分割不严格递减子序列的数目

策略: 遍历各个分割序列,如果最尾端大于等于 a a a ,则放置于后;否则开新序列(因此 g g g 递增)。
g [ i ] g[i] g[i] 对应第 i + 1 i+1 i+1 个分割序列,表示分割序列中最小的(最后的值)。容易知道 g g g 是 递增的,因此不传入 g r e a t e r < i n t > ( ) greater<int>() greater<int>(),同时为了得到第一个(最小的)大于等于 a a a 的值的地址,采用 l o w e r    b o u n d lower\;bound lowerbound

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法参数对拥塞控制的影响

来看看参数对公平收敛的影响。仅假象一下就知道应该是个加权公平&#xff0c;但事实如何&#xff0c;还是要具体看一下。 首先看 aimd&#xff0c;标准的 reno 算法是每 round 之后 cwnd 加 1&#xff0c;但如果有些流加 1&#xff0c;有些流加 2&#xff0c;会如何&#xff1…

踩坑【已解决】:使用maven打印结果是控制台输出中文乱码

报错原图&#xff1a; 解决方案&#xff1a; 1、修改maven->runner中的配置添加如下信息&#xff1a; -Dfile.encodingUTF-8 2、检查编码的配置信息&#xff1a; 3、检查窗口右下角的配置信息&#xff1a; 解决结果&#xff1a;

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器&#xff1a;embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件&#xff0c;取代物理硬件&#xff0c;为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…

【在Linux世界中追寻伟大的One Piece】网络命令|验证UDP

目录 1 -> Ping命令 2 -> Netstat命令 3 -> Pidof命令 4 -> 验证UDP-Windows作为client访问Linux 4.1 -> UDP client样例 1 -> Ping命令 Ping命令是一种网络诊断工具&#xff0c;它使用ICMP(Internet Control Message Protocol&#xff0c;互联网控制消…

CAN BUS

CAN BUS 原理 网上资料非常丰富&#xff0c;是车载系统主要BUS之一。 我们关注如下方面 can bus 是什么网络结构CAN BUS 协议ECU node实现其他 What is CAN Bus? Control Area Network (CAN) bus is a serial communication protocol that allows devices to exchange dat…

MySQL:视图【详解】

1、视图 1.1 视图的定义 视图是在数据库中定义的虚拟表。它是一个基于一个或多个实际表的查询结果集&#xff0c;可以像实际表一样被查询和操作。视图可以看作是一个动态生成的数据表&#xff0c;其内容是从其他表中选择、过滤和计算得到的。 视图通过使用SQL查询语句来定义…

Framebuffer应用编程

目录 前言 LCD操作原理 涉及的 API 函数 open函数 ioctl 函数 mmap 函数 Framebuffer程序分析 源码 1.打开设备 2.获取LCD参数 3.映射Framebuffer 4.描点函数 5.随便画几个点 上机实验 前言 本文介绍LCD的操作原理和涉及到的API函数&#xff0c;分析Framebuffer…

配置全新服务器深度学习一套流程

目录 1.安装anaconda2.配置cuda3.配置cudnn4.配置新的pytorch环境5.安装rdkit包6.小问题记录 1.安装anaconda 直接参考视频 总结&#xff1a; 1.下载anaconda安装包&#xff0c;尽量不下载最新的版本 2.bash 对应安装包&#xff0c;一直回车&#xff0c;yes 3.配置环境vim ~/.…

点餐小程序实战教程10权限验证

目录 1 创建员工的全局变量2 创建员工首页3 跳转到员工首页4 给全局变量赋值5 验证权限6 登录的完整代码总结 我们已经实现了员工的注册及登录功能&#xff0c;登录成功后需要跳转到我们的员工首页。在首页加载的时候我们需要去验证当前用户是否已经登录&#xff0c;未登录我就…

深入理解数据分析的使用流程:从数据准备到洞察挖掘

数据分析是企业和技术团队实现价值的核心。 5 秒内你能否让数据帮你做出决策&#xff1f; 通过本文&#xff0c;我们将深入探讨如何将原始数据转化为有意义的洞察&#xff0c;帮助你快速掌握数据分析的关键流程。 目录 数据分析的五个核心步骤1. 数据获取常用数据获取方式 2. 数…

synchronized的详解、锁的升级过程和优缺点比较

本文 详细介绍Java中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级 锁、重量级锁&#xff0c;以及锁升级过程。 Java中每一个对象都可以作为锁。具体表现形式为以下三种形式&#xff1a; 对于普通的同步方法&#xff0c;锁是当前的实例对象对于静态同步方法&a…

攻防世界--->秘密-银河-300

做题笔记。 适用于reverse的隐写术。。。。啊哈哈哈哈 下载 查壳。(用的WSL->Debian) 64ida打开。 运行程序如下&#xff1a; 反汇编看不出来什么名堂&#xff0c;那就去看汇编代码。 下个断点。 东看看西看看 这是我们程序打印代码 往下翻&#xff1a; SECRET 秘密。 我…

路径规划 | 基于A*算法的往返式全覆盖路径规划的改进算法(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于A*算法的往返式全覆盖路径规划的改进算法 matlab实现代码 往返式全覆盖路径规划&#xff0c;通过建立二维栅格地图&#xff0c;设置障碍物&#xff0c;以及起始点根据定义往返式路径规划的定义的优先级运动规则从…

网页本地存储

网页本地存储 <html> <script>//添加数据function add(){var text;textdocument.getElementById(text).value;indexlocalStorage.length1;localStorage.setItem(index,text);}//显示localStorage所有内容function showall(){storagelocalStorage;var length stor…

209.长度最小的子数组(滑动窗口类)

文章目录 209.长度最小的子数组滑动窗口904. 水果成篮76. 最小覆盖子串 209.长度最小的子数组 209.长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合…

2020ICPC上海 D - Walker M - Gitignore

D: 首先显然要二分,判断当前二分的mid时间下是否能满足走满0~n 枚举所有情况,这里按照左,右起点p1,p2分别讨论 p1向左 p2向左(以下向左和向右都代表向左或者向右到墙,而不代表初速度方向)&#xff0c;只需要计算p1或者p2反弹之后还能走距离n就是合法 p1向左 p2向右&#xff…

C++在Linux实现多线程和多进程的TCP服务器和客户端通信

多进程版本 服务器 #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/wait.h> #include <signal.h> #include <string&…

软件设计师——程序设计语言

目录 低级语言和高级语言 编译程序和解释程序 正规式&#xff0c;词法分析的一个工具 有限自动机 ​编辑 上下文无关法 ​编辑 中后缀表示法 杂题 ​编辑 低级语言和高级语言 编译程序和解释程序 计算机只能理解由0、1序列构成的机器语言&#xff0c;因此高级程序设计…

CAD_Electrical 2022使用记录

一、CAD软件实用调整 1、如何调节窗口背景颜色 例如&#xff1a;将图中白色的背景色调节为黑色。 步骤&#xff1a;在CAD空白区域点击右键 -> 点击选项 -> 在显示中点击颜色(窗口元素) -> 将二维模型空间统一背景的颜色修改成需要的颜色 2、如何调节关标大小 例如&a…

IP纯净度对跨境电商有哪些影响

在全球化贸易的浪潮中&#xff0c;跨境电商凭借其打破地理界限的能力&#xff0c;成为推动国际贸易的重要力量。然而&#xff0c;跨境电商的运营并非没有挑战&#xff0c;其中IP纯净度是影响其成功的关键因素之一。本文将探讨IP纯净度对跨境电商运营的多方面影响&#xff0c;并…