AcWing 1010. 拦截导弹 (LIS + 贪心)

简介: 笔记

1010. 拦截导弹


题意

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。


但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。


某天,雷达捕捉到敌国的导弹来袭。


由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。


输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。


思路

第一小问是裸的最长上升子序列


第二步 贪心地考虑两种情况


情况1:如果现有的子序列的结尾都小于当前数,则创建一个新的子序列


情况2:将当前的数放到结尾大于等于它的最小的子序列的最后


证明:设正确答案子序列个数为 b 设按照上面所述方法得到的子序列个数为 a


因为 b 是正确答案 所以一定有 b≤a

1.jpg


代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define mod 998244353
#define endl '\n'
using namespace std;
typedef long long LL;
typedef pair<int, int>PII;
const int N = 6000;
int n;
int a[N];
int q[N]; //q[i] 表示长度为 i 的下将子序列的最后一个数字的最大值 
int g[N];
void solve() {
  int cnt = 0;
  while (scanf("%d", &a[cnt]) != EOF)cnt++;
  int len = 0;
  for (int i = 0; i < cnt; ++i) { //最长下降子序列
    int l = 0, r = len;
    while (l < r) {
      int mid = l + r + 1 >> 1;
      if (q[mid] >= a[i])
        l = mid;
      else r = mid - 1;
    }
    len = max(len, r + 1);
    q[r + 1] = a[i];
  }
  cout << len << endl;
  int id = 0;
  for (int i = 0; i < cnt; ++i) {
    int k = 0;
    while (k < id && a[i] > g[k])k++;
    g[k] = a[i];
    if (k >= id)id++;
  }
  cout << id << endl;
}
int main() {
  //int t; cin >> t;
  //while (t--)
  solve();
  return 0;
}


目录
相关文章
|
关系型数据库 MySQL Linux
Centos7 环境使用 Docker 安装 Mysql 服务详解
Centos7 环境使用 Docker 安装 Mysql 服务详解
1984 0
Centos7 环境使用 Docker 安装 Mysql 服务详解
|
存储 前端开发 安全
webhook是什么 与API的区别在哪里
webhooks是一个api概念,是微服务api的使用范式之一,也被成为反向api,即:前端不主动发送请求,完全由后端推送。 举个常用例子,比如你的好友发了一条朋友圈,后端将这条消息推送给所有其他好友的客户端,就是 Webhooks 的典型场景。
webhook是什么 与API的区别在哪里
|
10月前
GLM-4模型微调报内核版本不匹配的错误
GLM-4模型微调报内核版本不匹配的错误
|
10月前
|
传感器 人工智能 物联网
数字孪生在航空航天领域的应用
数字孪生技术在航空航天领域的应用日益广泛,从设计、制造、测试到运营和维护,全面革新了传统工作模式。通过创建物理实体的虚拟复制品,实现实时模拟、预测和优化,显著提升产品性能、安全性和经济效益。具体案例如嫦娥五号探测器和C919客机的成功应用,展示了数字孪生技术的巨大潜力和未来前景。
|
10月前
|
数据挖掘 数据格式 Python
《Python数据分析实战:利用Pandas处理大规模数据集》
《Python数据分析实战:利用Pandas处理大规模数据集》
183 1
|
11月前
|
存储 数据可视化 数据挖掘
使用Matlab绘制简单的二维与三维图形
【10月更文挑战第3天】本文详细介绍了如何在 Matlab 中绘制简单的二维和三维图形,包括曲线图、柱状图、散点图、网格图、表面图、等高线图、多边形填充图、切片图及矢量场等。文章提供了丰富的代码示例,如使用 `plot`、`bar`、`scatter`、`plot3`、`mesh`、`surf`、`contour` 等函数绘制不同类型图形的方法,并介绍了 `rotate3d`、`comet3` 和 `movie` 等工具实现图形的交互和动画效果。通过这些示例,读者可以轻松掌握 Matlab 的绘图技巧,并应用于数据可视化和分析中。
|
12月前
|
SQL 机器学习/深度学习 自然语言处理
Text-to-SQL技术演进 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法剖析
本文介绍了Text-to-SQL的技术演进,并对OpenSearch-SQL方法进行剖析。
1500 8
|
Linux 测试技术 API
Ollama+Qwen2,轻松搭建支持函数调用的聊天系统
本文介绍如何通过Ollama结合Qwen2,搭建OpenAI格式的聊天API,并与外部函数结合来拓展模型的更多功能。
|
资源调度 JavaScript 搜索推荐
Linux系统之部署CodeX Docs文档工具
【8月更文挑战第7天】Linux系统之部署CodeX Docs文档工具
192 4
|
关系型数据库 MySQL Linux
Docker中运行一个mysql
尽管不希望在docker中运行mysql,但是自己玩确实方便~~~
4403 2
Docker中运行一个mysql