蓝桥杯飞机降落dfs深度解析

蓝桥杯飞机降落dfs深度解析

  • 蓝桥杯14届省赛[飞机降落]
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例输入
    • 样例输出
    • 提示
    • code
      • 完整代码:

蓝桥杯14届省赛[飞机降落]

题目描述

N 架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 Ti 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di 个单位时间,即它最早

可以于 Ti 时刻开始降落,最晚可以于 Ti + Di 时刻开始降落。降落过程需要 Li个单位时间。

一架飞机降落完毕时,另一架飞机可以立即在同一时刻开始降落,但是不能在前一架飞机完成降落前开始降落。

请你判断 N 架飞机是否可以全部安全降落。

输入格式

输入包含多组数据。

第一行包含一个整数 T,代表测试数据的组数。

对于每组数据,第一行包含一个整数 N。

以下 N 行,每行包含三个整数:Ti,Di 和 Li。

输出格式

对于每组数据,输出 YES 或者 NO,代表是否可以全部安全降落。

样例输入

复制

2
3
0 100 10
10 10 10
0 2 20
3
0 10 20
10 10 20
20 10 20

样例输出

复制

YES
NO

提示

对于第一组数据,可以安排第 3 架飞机于 0 时刻开始降落,20 时刻完成降落。安排第 2 架飞机于 20 时刻开始降落,30 时刻完成降落。安排第 1 架飞机于 30 时刻开始降落,40 时刻完成降落。

对于第二组数据,无论如何安排,都会有飞机不能及时降落。

对于 30% 的数据,N ≤ 2。

对于 100% 的数据,1 ≤ T ≤ 10,1 ≤ N ≤ 10,0 ≤ Ti , Di , Li ≤ 105。


## 解题思路

1.看数据范围: 共有 T 组数据,T 最大为 10, N最大为 10, 所以可以先想暴力解法。

2.暴力解法做法: 对于 N 架飞机, 枚举出他们的全排列,然后看其中一种能否安全的降落所有飞机。

我觉得这个题的难点主要有两点:

  • 我看到这个题的第一时间会想到排序,因为我没有看到数据范围,所以想到的是贪心排序后,能否按照排序后的结果去安全的降落飞机。也就是说,第一时间可能想不到暴力搜索。(可能是题刷少了)
  • 在暴力搜索的过程中,判断飞机是否能够安全停靠的条件很难想出来。

code

1.写出深度优先搜索模板 (顺便回顾如何全排列)

void dfs(int step) {if(step == n ) {结束条件return ;}for(int i = 0; i < n; i ++) {if(!book[i]) {book[i] = true;dfs(step + 1);book[i] = false;}}
}

2.复习全排列写法

#include <iostream>
using namespace std;const int N = 20;
int n, book[N], a[N];void dfs(int step) {if(step == n) {for(int i = 0; i < n; i ++) cout<<a[i]<<" ";cout<<endl;return ;}for(int i = 0; i < n; i ++) {if(!book[i]) {book[i] = 1;a[step] = i + 1;dfs(step + 1);a[step] = 0;book[i] = 0;}}
}int main() {cin>>n;dfs(0);return 0;
}

3.写出本题飞机能安全停靠的条件判断

由于飞机到达时间 T , 可以盘旋时间 D,降落需要时间 L

可以知道飞机只要在 T ~ T + D 这段时间降落就可以停下,当然安全降落会消耗时间 L

那么也就是说,停靠上一架飞机时间 time 满足 T <= time <= T + D, 飞机就可以安全降落, 然后降落会耗费时间 L, 也就是停靠下一次飞机的时候。当前时间 time更新为 time = time + L

你以为这样就万事大吉了吗?错!!!

我们还没有考虑到, 其实当 time < T 的时候,也就是说,上一架飞机安全停靠后,过了一段时间当前这架飞机才到机场,也就是说,当

time < T 的时候,实际上我们当前飞机都不用耗费燃料 D 盘旋,也就是说,time < T 不影响我们能否安全降落,也就是说可以去除条件 T

< time, 也就是说, 当 time <= T + D 的时候就可以安全降落。

你以为这样又往事大吉了吗?错!!!

当时间更新的时候,我们需要考虑到,当飞机停靠时间 time 在时间 T之前,我们真实去停靠完成这架飞机的时间应该是 T +L而不是 time + L,所以更新时间可以写为 time = max(time, T) + L;

完整代码:

#include <iostream>
using namespace std;const int N = 20;
int n, t, book[N], T[N], D[N], L[N];
bool result;void dfs(int step, int time) {if(step == n)  {result = true;return;}    for(int i = 0; i < n; i ++) {if(!book[i] && time <= T[i] + D[i]) {book[i] = 1;dfs(step + 1, max(time, T[i]) + L[i]);book[i] = 0;}}return;
}int main() {cin>>t;while(t --) {cin>>n;for(int i = 0; i < n; i ++) cin>>T[i]>>D[i]>>L[i];result = false;dfs(0, 0);if(result) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}

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

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

相关文章

Few-short Learning笔记-1

Few short learning 用很少的样本进行分类或者是回归 support set&#xff1a;小的数据集&#xff08;无法训练出深度神经网络&#xff09; few short learning的目标是让机器自己学会学习。 few shot learning是一种meta learning&#xff08;learn to learn&#xff09; 举…

Rust编程(五)终章:查漏补缺

闭包 & 迭代器 闭包&#xff08;Closure&#xff09;通常是指词法闭包&#xff0c;是一个持有外部环境变量的函数。外部环境是指闭包定义时所在的词法作用域。外部环境变量&#xff0c;在函数式编程范式中也被称为自由变量&#xff0c;是指并不是在闭包内定义的变量。将自…

MySQL学习笔记------DCL

DCL Data Control Language&#xff08;数据控制语言&#xff09;&#xff0c;用来管理数据库用户、控制数据库的访问权限 一、管理用户 1、查询用户 USE mysql&#xff1b; select *from user&#xff1b; 2、创建用户 create user 用户名主机名 identified by 密码&a…

向机器人传授人类社会同步的艺术

在数字时代&#xff0c;社交机器人正迅速成为主流社会的一部分&#xff0c;从培训医生和教育儿童到提供谈话疗法和客户服务。现在&#xff0c;这是一个价值数十亿美元的全球产业&#xff0c;对具有类似人类社交智能的机器人的需求不断增长&#xff0c;这标志着我们技术史上的一…

Linux之冯诺依曼体系,操作系统,进程的理解,进程状态,以及进程的优先级

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.冯诺依曼体系 二.操作系统 2.1概念 2.2结构示意图&…

质检规则-正则

目录 需求 实现 mysql oracle pg hive 达梦 需求 在数据质量检核中&#xff0c;经常会要求检查数据数据符合某些要求&#xff0c;比较某个字段是否是数字或者是否是日期等等&#xff0c;经常这种就用到数据库正则 实现 参数说明&#xff1a; 通用规则&#xff0c;${PAR…

主流公链 - BCH BSV BTG

为什么出现分叉 BTC是自由的&#xff0c;BTC社区也是自由的&#xff0c;自然而然的会出现不同观点的群体 1. 比特币现金&#xff08;Bitcoin Cash&#xff0c;BCH&#xff09; 分叉日期&#xff1a; 2017年8月1日主要目的&#xff1a; 提高比特币的交易吞吐量和降低交易费用技术…

写作类AI推荐(一)

本章要介绍的写作AI如下&#xff1a; paperpal 特点&#xff1a; 面向科研人员的AI写作工具。可以选择自己的专业&#xff0c;如本科生/教授。 链接&#xff1a;Paperpal-专业AI论文润色与论文检测平台 笔灵 特点&#xff1a; 面向专业写作领域的AI写作工具。可以选择要写的文章…

人事管理系统|基于springboot人事管理系统的设计与实现(附项目源码+论文)

基于springboot人事管理系统的设计与实现 目录 基于springboot人事管理系统的设计与实现 一、摘要 二、相关技术 三、系统设计 3.1 整体功能结构图 3.2 功能具体细节设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取&#xff1a; 一、摘要 传统信息…

C# 异步与 Unity 协程(实例讲解)

C#异步编程实例&#xff1a; 假设我们有一个需要从Web获取数据的简单应用。我们可以使用C#的异步编程模型来避免UI线程被HTTP请求阻塞 1using System.Net.Http; 2using System.Threading.Tasks; 3 4public class AsyncExample 5{ 6 public async Task<string> Fetch…

【ripro美化】全站美化包WordPress RiPro主题二开美化版sucaihu-childV1.9(功能集成到后台)

使用介绍 1、【宝塔】删除ripro文件&#xff0c;上传最新ripro版本&#xff0c;然后上传压缩包内的ripro里面的对应文件到ripro主题对应内覆盖&#xff08;找到对应路径单个文件去覆盖&#xff09;。 2、然后上传ripro-chlid子主题美化包到/wp-content/themes路径下 3、注意顺…

蓝桥杯---蜗牛【动态规划典型题目】

题目链接&#xff1a;蜗牛 import java.util.*;public class Main {public static void main(String[] args) {Scanner scannernew Scanner(System.in);int nscanner.nextInt();int[] xnew int[n1];for(int i1;i<n;i){x[i]scanner.nextInt();}int[] anew int[n1];int[] bnew…

npm卸载不掉的解决方案

不管怎么重装重启都报错 真服了&#xff0c;npm卸载不掉绝对是有缓存存在&#xff0c;用where npm查到d盘 实际上根本不在这个地方&#xff0c;这个是我安装的6.14.12版本的npm的地方&#xff0c;我说我怎么怎么重装怎么导包都不行呢&#xff0c;偷偷隐藏在这个目录里面&#…

【代码随想录算法训练营第三十九天 | LeetCode62.不同路径、63. 不同路径 II】

代码随想录算法训练营第三十九天 | LeetCode62.不同路径、63. 不同路径 II 一、62.不同路径 解题代码C&#xff1a; class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m, vector<int>(n, 0));for (int i 0; i < m; i) …

GRE_MGRE综合实验

目录 1、R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址。 IP配置 配置公网全网通 2、&#xff08;1&#xff09;R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方。 PAP认证 &#xff08;2&#xff09;R2与R5之间使用ppp的CHAP认证&am…

如何修改IDEA的代码样式配置+代码格式化快捷键配置

目录 问题现象&#xff1a; 问题分析&#xff1a; 温馨提示&#xff1a; 1、IDEA的代码样式配置 1.1、Use tab character - Smart tabs 配置&#xff1a; 1.2、Tab Size 配置&#xff1a; 1.3、Indent 配置&#xff1a; 1.4、Continuation Indent 配置 1.5、应用并保存 2、…

openstack 不能调度到某主机上分析

dashboard显示有足够资源创建虚拟机 创建一个1c2g20g配置的虚拟机&#xff0c;在过滤时把10-197-0-2这个主机过滤掉了&#xff0c;日志如下&#xff1a; 2024-03-25 17:52:14.087 26 DEBUG nova.scheduler.filters.disk_filter [req-8f2f32fb-1efe-4e5d-81fc-618210c7c76d 773…

【LeetCode: 面试题 16.05. 阶乘尾数 + 阶乘】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

俄罗斯深陷芯片自主困境,良率仅5成 |百能云芯

俄罗斯的芯片产业一直以来都面临着诸多挑战&#xff0c;尤其是在当前的国际形势下&#xff0c;这些挑战更加凸显。随着俄乌冲突的爆发&#xff0c;西方国家对俄罗斯实施了一系列经济制裁&#xff0c;导致俄罗斯科技产业受到了严重影响。据了解&#xff0c;俄国最大的本土芯片厂…

Redis的数据类型String使用场景实战

Redis的数据类型String使用场景实战 String模型的使用场景 常见面试题&#xff1a;redis在你们项目是怎么使用的&#xff1f;String类型说一个&#xff0c;还有其他用处没&#xff1f; 知识回顾 // 获取redis的key为 WATCH_KEEPER_PREFIX "wka" 的值String wka …