当前位置: 首页 > news >正文

【全网首发】洛谷P1020 [NOIP1999 提高组] 导弹拦截

P1020 导弹拦截 の 题目传送门。

解题思路

显然,第一问求的是最长不上升子序列。

于是接下来直接抛开第一问不谈,也不考虑优化,直接考虑第二问。待会就知道原因了。

引理:Dilworth 定理

狄尔沃斯定理亦称偏序集分解定理,该定理断言:对于任意有限偏序集,其最大反链中元素的数目必等于最小链划分中链的数目。此定理的对偶形式亦真,它断言:对于任意有限偏序集,其最长链中元素的数目必等于其最小反链划分中反链的数目。

该定理在该问题上可以理解成:把序列分成不上升子序列的最少个数,等于序列的最长上升子序列长度。把序列分成不降子序列的最少个数,等于序列的最长下降子序列长度。

则第二问等价于最长上升子序列。

贪心

先不管引理对我们有什么用,我们直接思考第二问贪心怎么做。

对于每个数,既可以把它接到已有的导弹拦截后面,也可以建立一个新系统。要使子序列数最少,应尽量不建立新序列。

另外,应让每个导弹系统的末尾尽可能大,这样能接的数更多。因为一个数若能接到小数后面,必然能接到大数后面,反之则不成立。根据这些想法,可总结出如下贪心流程:

从前往后扫描每个数,对于当前数

1.若现有子序列的结尾都小于它,则创建新子序列。

2.否则,将它放到结尾大于等于它的最小数后

贪心证明

我们可以知道,证明 A=B,可证 A≤B 且 A≥B。

记 A 为贪心解,B 为最优解。

贪心解能覆盖所有数,且形成的都是不升序列,因此合法。由定义,B≤A。

假设最优解对应的方案和贪心方案不同,从前往后找到第一个不在同一序列的数 x。假设贪心解中 x 前面的数是 a,最优解中 x 前面的数是 b,a 后面的数是 y,由于贪心会让当前数接到大于等于它的最小数后面,所以 ,x,y≤a≤b。
此时,在最优解中,把 x 一直到序列末尾,和 y 一直到序列末尾交换位置,这样做不影响正确性,也不增加序列个数,但会使 x 在最优解和贪心解中所处的位置相同。由于序列中的数是有限的,只要一直做下去,一定能使最优解变为贪心解。因此A≤B。

等等,第二问根据引理是求最长上升子序列,但是贪心也可以求。说明我们的贪心解法等于最长上升子序列 !!(引理作用即在此处

贪心可以求上升子序列,自然连第一问求的最长不上升子序列也可以求了。

最坏复杂度O(n2),但是数据很水,可以完美通过此题。

我们也可以对此代码进行二分优化(即查找 k 的时候):

AC 代码:

#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l,END##i=r;i<=END##i;++i)
#define dn(r,l,i) for(int i=r,END##i=l;i>=END##i;--i)
using namespace std;
typedef long long i64;
const int INF =2147483647;
const int MAXN=1e5+3;
int n,t,H[MAXN],F[MAXN];
int main(){while(~scanf("%d",&H[++n])); --n;t=0,memset(F,0,sizeof(F)),F[0]=INF;up(1,n,i){int l=0,r=t+1; while(r-l>1){int m=l+(r-l)/2;if(F[m]>=H[i]) l=m; else r=m;}int x=l+1;  // dp[i]if(x>t) t=x; F[x]=H[i];}printf("%d\n",t);t=0,memset(F,0,sizeof(F)),F[0]=0;up(1,n,i){int l=0,r=t+1; while(r-l>1){int m=l+(r-l)/2;if(F[m]<H[i]) l=m; else r=m;}int x=l+1;if(x>t) t=x; F[x]=H[i];}printf("%d\n",t);return 0;
}

相关文章:

【全网首发】洛谷P1020 [NOIP1999 提高组] 导弹拦截

P1020 导弹拦截 の 题目传送门。 解题思路 显然&#xff0c;第一问求的是最长不上升子序列。 于是接下来直接抛开第一问不谈&#xff0c;也不考虑优化&#xff0c;直接考虑第二问。待会就知道原因了。 引理&#xff1a;Dilworth 定理 狄尔沃斯定理亦称偏序集分解定理&#…...

trino-435版本windows下源码编译

一、源码下载地址 https://github.com/trinodb/trino/tags 二、编译环境及工具准备 1、maven &#xff08;1&#xff09;版本&#xff1a;3.6.3 &#xff08;2&#xff09;settings.xml配置 <?xml version"1.0" encoding"UTF-8"?> <settin…...

java类和对象的思想概述

0.面向对象Object OOP——名人名言&#xff1a;类是写出来的&#xff0c;对象是new出来的 **> 学习面向对象的三条路线 java类以及类成员&#xff1a;&#xff08;重点&#xff09;类成员——属性、方法、构造器、&#xff08;熟悉&#xff09;代码块、内部类面向对象特征&…...

ant design vue3中引入message消息提示,全局引入亲测有效

两种方式 第一种&#xff1a;使用provide和inject方式 第二种&#xff1a;使用全局挂载$message方式 第一种&#xff1a; //main.ts import { createApp } from vue; import App from ./App; import Antd,{ message } from ant-design-vue; import ant-design-vue/es/mess…...

UE5 Landscape 制作GIS卫星图地形

1. 总体想法&#xff1a; 制作GIS地形&#xff0c;使用Landscaping MapBox是一个好方法&#xff0c;但是区域过大&#xff0c;会占用很多内存 https://blog.csdn.net/qq_17523181/article/details/135029614 如果采用QGis&#xff0c;导出卫星图&#xff0c;在UE5里拼合出地形…...

opencv入门到精通——改变颜色空间

目录 目标 改变颜色空间 对象追踪 如何找到要追踪的HSV值&#xff1f; 目标 在本教程中&#xff0c;你将学习如何将图像从一个色彩空间转换到另一个&#xff0c;像BGR↔灰色&#xff0c;BGR↔HSV等 除此之外&#xff0c;我们还将创建一个应用程序&#xff0c;以提取视频中的…...

法线贴图实现地形模型皱褶、凹凸不平的纹理效果

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 法线贴图在3D建模中扮演着重要的角色&#xff0c;它通过模拟表面的微…...

【SpringBoot篇】基于Redis实现生成全局唯一ID的方法

文章目录 &#x1f354;生成全局唯一ID&#x1f339;为什么要生成全局唯一id&#x1f33a;生成全局id的方法✨代码实现 &#x1f354;生成全局唯一ID 是一种在分布式系统下用来生成全局唯一id的工具 在项目中生成全局唯一ID有很多好处&#xff0c;其中包括&#xff1a; 数据…...

轻度听力损失的儿童需要早期干预吗?

一些宝宝在做听力筛查时总是不通过&#xff0c;进一步听力诊断发现宝宝有轻度的听力损失&#xff0c;刚知道这个消息时&#xff0c;家长可担心了&#xff0c;总想着宝宝是不是听不到啊&#xff1f;但是一段时间后&#xff0c;有些家长又会忽略宝宝的听力问题&#xff0c;因为部…...

【Spring Security】认证密码加密Token令牌CSRF的使用详解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Spring Security》。&#x1f3af;&#x1f3af; …...

python一点通: 一文讲清Post 和 Put操作区别!

当我们使用网络服务时&#xff0c;如果我们不能小心地区分 POST 和 PUT&#xff0c;有时可能会触发错误。 在 Web 开发世界中&#xff0c;特别是在处理 RESTful API 时&#xff0c;HTTP 方法 POST 和 PUT 经常被使用&#xff0c;但常常被误解。这两者都用于向服务器发送数据&a…...

通过 Higress Wasm 插件 3 倍性能实现 Spring-cloud-gateway 功能

作者&#xff1a;韦鑫&#xff0c;Higress Committer&#xff0c;来自南京航空航天大学分布式系统实验室 导读&#xff1a;本文将和大家一同回顾 Spring Cloud Gateway 是如何满足 HTTP 请求/响应转换需求场景的&#xff0c;并为大家介绍在这种场景下使用 Higress 云原生网关的…...

0.618算法和基于Armijo准则的线搜索回退法

0.618代码如下&#xff1a; import math # 定义函数h(t) t^3 - 2t 1 def h(t): return t**3 - 2*t 1 # 0.618算法 def golden_section_search(a, b, epsilon): ratio 0.618 while (b - a) > epsilon: x1 b - ratio * (b - a) x2 a ratio * (b - a) h_…...

DPDK单步跟踪(3)-项目配置和单步跟踪

项目配置 下面都是示例的情况&#xff0c;请大家根据自己的工程来修改 ## 首先是配置CMake build setting Debug setting 这里最重要的是&#xff1a; –proc-type secondary 表示这是以secondary模式启动的dpdk客户端。 ## path mapping 然后根据自己的需要&#xff0c;配置…...

.NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式

之前写过使用自定义返回类的方式来统一接口数据返回格式&#xff0c;.Net Core webapi RestFul 统一接口数据返回格式-CSDN博客 但是这存在一个问题&#xff0c;不是所有接口会按照定义的数据格式返回&#xff0c;除非每个接口都返回我们自定义的类&#xff0c;这种实现起来不…...

vue3 使用addRoute动态添加路由,页面刷新就白屏解决办法

问题&#xff0c;通过接口动态添加路由&#xff0c;第一次从登录页跳转还是正常的&#xff0c;说明路由添加成功了&#xff0c;但是刷新后就白屏了&#xff0c;且控制台报错路由匹配不到&#xff0c;在项目的main.js&#xff0c;router和路由拦截器中添加了一大堆打印后发现&am…...

探索鸿蒙:了解华为鸿蒙操作系统的基础课程

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习产出&#xff1a; 介绍鸿蒙操作系统的起源和发展历程。 理解鸿蒙操作系统的核心概念和体系结构。 学习如何搭建和配置鸿蒙开发环境。 掌握基础的鸿蒙应用开发技术&#xff0c;包括应用的创建、…...

【Linux】进程周边007之进程控制

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.进程创建 2.进程终止 2.…...

【C++】vector容器的模拟实现

目录 一&#xff0c;框架设计 二&#xff0c;构造函数 三&#xff0c;析构函数 四&#xff0c;赋值运算符 五&#xff0c;容器接口的实现 1&#xff0c;迭代器实现 2&#xff0c;“ [] ”运算符的实现 3&#xff0c;swap交换和resize重设大小 4&#xff0c;insert插入…...

华为Harmony——ArkTs语言

文章目录 一、简单示例二、声明式UI描述创建组件无参有参数 配置属性配置事件配置子组件 三、自定义组件基本用法基本结构成员函数/变量 一、简单示例 我们以一个具体的示例来说明ArkTS的基本组成。如下图所示&#xff0c;当开发者点击按钮时&#xff0c;文本内容从“Hello Wo…...

Claude Code 模型特定调优与 A/B 测试全解析:Feature Flag、灰度发布、Undercover、安全门控、Prompt 调优与 AI Agent 工程化实战

一、先说结论&#xff1a;AI Agent 真正难的不是“会调用模型”&#xff0c;而是“能持续驾驭模型”很多人做 AI 编码助手、企业智能体、研发提效工具时&#xff0c;第一反应是接入一个更强的大模型&#xff1a;换成更大的参数、更新的版本、更长的上下文&#xff0c;似乎问题就…...

WandEnhancer:开源WeMod增强工具,免费解锁Pro功能与远程控制

WandEnhancer&#xff1a;开源WeMod增强工具&#xff0c;免费解锁Pro功能与远程控制 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer WandEnhancer是一款…...

告别手动!用Windows批处理脚本批量搞定MKVToolNix音轨修改(附完整代码)

告别手动&#xff01;用Windows批处理脚本批量搞定MKVToolNix音轨修改&#xff08;附完整代码&#xff09; 每次下载完一整季剧集或动漫&#xff0c;最头疼的就是音轨标签乱七八糟——日语、英语、中文混在一起&#xff0c;默认音轨设置也不对。手动在MKVToolNix里一集集调整&a…...

AI大模型产品经理零基础到进阶学习路线图,AI产品经理:不只是懂算法,更需AI思维!

AI产品经理区别于普通产品经理的地方&#xff0c;不止在懂得AI算法&#xff0c;更重要的是具有AI思维。 人工智能产品设计要以操作极度简单为标准&#xff0c;但是前端的简单代表后端的复杂&#xff0c;系统越复杂&#xff0c;才能越智能。 同样&#xff0c;人工智能的发展依赖…...

基于开源项目chatgpt-cloned构建本地化AI对话应用:架构、部署与定制指南

1. 项目概述&#xff1a;一个“克隆”ChatGPT的本地化实践 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“chatgpt-cloned”。光看名字&#xff0c;很多人可能会以为这是一个试图完全复刻OpenAI ChatGPT庞大模型和服务的“巨无霸”工程。但点进去仔细研究后&#xff0…...

PostgreSQL游标深度解析:大数据集处理与Python应用实践

1. 项目概述&#xff1a;为什么我们需要关注PostgreSQL游标&#xff1f;在数据库开发的世界里&#xff0c;我们常常听到“游标”这个词&#xff0c;尤其是在处理Oracle或SQL Server这类商业数据库时。但在PostgreSQL的语境下&#xff0c;很多开发者&#xff0c;尤其是从其他数据…...

基于Godot Engine的3D树形结构可视化:从原理到实践

1. 项目概述&#xff1a;从二维到三维的树形结构可视化革命如果你曾经被项目中错综复杂的层级关系搞得头晕眼花&#xff0c;比如一个庞大的组织架构图、一个深不见底的目录树&#xff0c;或者一个复杂的决策流程&#xff0c;那么你肯定尝试过用树形图来梳理它们。传统的树形图&…...

DeepSeek-CLI:命令行集成AI助手,提升开发效率的终端利器

1. 项目概述&#xff1a;一个为DeepSeek模型量身打造的命令行利器如果你和我一样&#xff0c;日常工作中频繁地与各种AI模型打交道&#xff0c;尤其是DeepSeek这类优秀的开源模型&#xff0c;那你一定体会过在浏览器、API调试工具和代码编辑器之间反复横跳的繁琐。每次想快速问…...

从词嵌入到注意力衰减:一次大模型安全边界的逆向测绘实验

0. 这篇文章是关于什么的这是一份从底层代码出发&#xff0c;亲手搭建实验环境&#xff0c;尝试逆向测绘大模型安全边界的技术笔记。几天前&#xff0c;我在一篇分析Transformer安全机制的文章中提出过一个假设&#xff1a;大模型的安全审查&#xff0c;不是一套离散的、随机的…...

3分钟免费搞定百度网盘秒传:永久分享大文件的终极解决方案

3分钟免费搞定百度网盘秒传&#xff1a;永久分享大文件的终极解决方案 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否厌倦了百度网盘分享链接频繁失…...