第十四届蓝桥杯省赛C++B组D题【飞机降落】题解(AC)

news2024/10/5 21:16:44

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题思路

这道题目要求我们判断给定的飞机是否都能在它们的油料耗尽之前降落。为了寻找是否存在合法的降落序列,我们可以使用深度优先搜索(DFS)的方法,尝试所有可能的降落顺序。

首先,我们需要理解题目中的条件。每架飞机在 T i T_i Ti 时刻到达机场上空,剩余油料可以维持 D i D_i Di 个单位时间,降落需要 L i L_i Li 个单位时间。这意味着每架飞机可以在 T i T_i Ti T i + D i T_i+D_i Ti+Di 的时间段内开始降落。

然后,我们可以按照以下步骤来实现 DFS:

  1. 首先,我们初始化一个布尔数组 st[] 来记录每架飞机是否已经降落。
  2. 然后,我们对每架飞机尝试进行降落。这里的 “尝试” 意味着我们需要检查该飞机是否可以在当前的时间内开始降落,即它的开始降落时间是否在 T i T_i Ti T i + D i T_i+D_i Ti+Di 的时间段内。如果可以,我们就让它降落,并把 st[i] 设置为 true
  3. 在一架飞机降落之后,我们递归地对剩下的飞机进行尝试。这一步就是 DFS 的主要部分,我们需要在所有的可能的降落序列中进行搜索。
  4. 如果在某一步我们发现当前的飞机无法在当前的时间内开始降落,我们就返回 false,并在上一层中尝试下一架飞机。
  5. 如果所有的飞机都已经降落,我们就返回 true
  6. 最后,我们对所有飞机进行尝试。如果存在至少一个可以让所有飞机都降落的序列,我们就输出 YES,否则输出 NO

通过以上步骤,我们可以找出是否存在一个合法的降落序列,使得所有的飞机都能在它们的油料耗尽之前降落。

AC_Code

  • C++
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 15;

int n;
int a[N], b[N], c[N];
bool st[N];

bool dfs(int u, int last, int cnt)
{
    if (b[u] < last)
        return false;
    if (cnt == n)
        return true;
    
    for (int i = 0; i < n; ++ i )
        if (!st[i])
        {
            st[i] = true;
            if (dfs(i, max(a[u], last) + c[u], cnt + 1))
                return true;
            st[i] = false;
        }
    
    return false;
}

int main()
{
    int T;
    cin >> T;
    
    while (T -- )
    {
        memset(st, 0, sizeof st);
        
        cin >> n;
        for (int i = 0; i < n; ++ i )
            cin >> a[i] >> b[i] >> c[i], b[i] += a[i];
        
        bool flag = false;
        for (int i = 0; i < n; ++ i )
        {
            st[i] = true;
            if (dfs(i, 0, 1))
            {
                flag = true;
                break;
            }
            st[i] = false;
        }
        
        cout << (flag? "YES": "NO") << endl;
    }
    
    return 0;
}
  • Java
import java.util.*;

public class Main {
    static final int N = 15;
    static int n;
    static int[] a = new int[N], b = new int[N], c = new int[N];
    static boolean[] st = new boolean[N];

    static boolean dfs(int u, int last, int cnt) {
        if (b[u] < last) {
            return false;
        }
        if (cnt == n) {
            return true;
        }
        for (int i = 0; i < n; ++i) {
            if (!st[i]) {
                st[i] = true;
                if (dfs(i, Math.max(a[u], last) + c[u], cnt + 1)) {
                    return true;
                }
                st[i] = false;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();
        while (T-- > 0) {
            Arrays.fill(st, false);
            n = scanner.nextInt();
            for (int i = 0; i < n; ++i) {
                a[i] = scanner.nextInt();
                b[i] = scanner.nextInt() + a[i];
                c[i] = scanner.nextInt();
            }
            boolean flag = false;
            for (int i = 0; i < n; ++i) {
                st[i] = true;
                if (dfs(i, 0, 1)) {
                    flag = true;
                    break;
                }
                st[i] = false;
            }
            System.out.println(flag ? "YES" : "NO");
        }
        scanner.close();
    }
}
  • Python
N = 15
a, b, c = [0]*N, [0]*N, [0]*N
st = [False]*N

def dfs(u, last, cnt):
    if b[u] < last:
        return False
    if cnt == n:
        return True
    for i in range(n):
        if not st[i]:
            st[i] = True
            if dfs(i, max(a[u], last) + c[u], cnt + 1):
                return True
            st[i] = False
    return False

T = int(input().strip())
for _ in range(T):
    st = [False]*N
    n = int(input().strip())
    for i in range(n):
        a[i], b[i], c[i] = map(int, input().strip().split())
        b[i] += a[i]
    flag = False
    for i in range(n):
        st[i] = True
        if dfs(i, 0, 1):
            flag = True
            break
        st[i] = False
    print("YES" if flag else "NO")

【在线测评】

在这里插入图片描述

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

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

相关文章

tcpdump命令详解及使用实例

1、抓所有网卡数据包&#xff0c;保存到指定路径 tcpdump -i any -w /oemdata/123.pcap&一、tcpdump简介 tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供and、or、not等逻辑语句来去掉无用的信…

Python中爬虫编程的常见问题及解决方案

Python中爬虫编程的常见问题及解决方案 引言&#xff1a; 随着互联网的发展&#xff0c;网络数据的重要性日益突出。爬虫编程成为大数据分析、网络安全等领域中必备的技能。然而&#xff0c;爬虫编程不仅需要良好的编程基础&#xff0c;还需要面对着各种常见的问题。本文将介绍…

Qt中文乱码如何解决

目录 一、使用建议 二、其它设置 一、使用建议 Qt对中文的支持不是很友好&#xff0c;使用QtCreator会出现各种乱七八糟的中文代码问题&#xff0c;如何处理这种问题&#xff1f; &#xff08;1&#xff09;粘贴别人的代码时&#xff0c;先在记事本里粘贴一遍&#xff0c;再…

【Python机器学习】gradio库(快速创建简单的 Web 界面来演示机器学习模型)

文章目录 1. 主要特点2. 安装 Gradio3. 基于tensorflow的例子4. 基于Pytorch的例子4.1 步骤4.2 代码4.3 使用说明Gradio 是一个 Python 库,用于快速创建简单的 Web 界面来演示机器学习模型。它被广泛用于各种应用,如音频、文本、图像处理和更多。Gradio 使得任何人都可以轻松…

深圳比创达电子EMC|EMC电磁兼容性行业:推动电子产品向更高发展

随着科技的飞速发展&#xff0c;电子产品在我们的日常生活中无处不在&#xff0c;从智能手机到智能家居&#xff0c;从医疗设备到工业自动化&#xff0c;这些设备的普及和更新换代对电磁兼容性&#xff08;EMC&#xff09;提出了更高的要求。 一、EMC电磁兼容性行业的概述 EM…

深度学习笔记: 最详尽解释预测系统的分类指标(精确率、召回率和 F1 值)

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 预测系统的分类指标(精确率、召回率和 F1 值) 简介 让我们来谈谈预测系统的分类指标以及对精确率、召回…

气象站的气象工具都有哪些呢?

气象站&#xff0c;作为观测和记录天气现象的重要基地&#xff0c;拥有一系列专业的气象工具。这些工具不仅能够帮助我们深入了解大气的运动规律&#xff0c;还能为天气预报、气候研究等提供宝贵的数据支持。 风速风向仪也是气象站重要的工具。它通常由风向变送器和风速变送器组…

【数据结构与算法】堆排序算法原理与实现:基于堆实现的高效排序算法

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 堆排序的简介 堆排序的特点 二、堆的概念 三、堆排序算法的原理 四、堆…

智能技术【机器学习】总结

文章目录 第一部分 优化第二部分 模型第一章 神经网络&#xff08;MLP, BP, CNN, GNN, and Attention&#xff09;1.1 神经网络基础1.1.1 高次非线性函数1.1.2 感知器与神经网络1.1.3 联结主义模型1.1.4 动机——为什么每个人都在谈论深度学习&#xff1f;1.1.5 背景1.1.6 神经…

【Android面试八股文】什么是ANR?如何分析和定位ANR?如何避免ANR?

文章目录 一、ANR概述二、触发ANR的主要场景三、Android四大组件中的潜在的ANR风险五、避免ANR的实践建议六、ANR的产生原因与出现的场景6.1 原因:6.2 出现场景:七、ANR的定位与分析7.1. ANR分析思路——traces7.2 ANR其他分析思路与相关日志7.2.1 分析logcat思路7.2.2 分析k…

机器学习:分类模型的评估指标

在机器学习中&#xff0c;评估分类模型的性能是至关重要的环节。选择合适的评估指标能够帮助我们全面了解模型的表现&#xff0c;尤其是在不同的数据分布和应用场景下。下面详细介绍一些常用的分类模型评估指标。 混淆矩阵&#xff08;confusion matrix&#xff09;是模式识别…

【Linux】TCP协议【下二】{流量控制/滑动窗口/延迟应答/捎带应答/拥塞控制}

文章目录 1.流量控制--利用“窗口大小”字段协商数据量大小1. 1第一次的时候&#xff0c;怎么保证发送数据量是合理的1.2第三次握手ack的时候&#xff0c;可以携带数据&#xff01;1.3流量控制&#xff0c;属于可靠性还是属于效率&#xff1f; 2.滑动窗口--利用滑动窗口解决批量…

Apple Intelligence或将登陆Vision Pro,但不会在今年实现|TodayAI

在上个月的WWDC 2024主题演讲中&#xff0c;Apple公司发布了其全新的Apple Intelligence&#xff0c;但没有提及这一技术将应用于其最新产品之一——Apple Vision Pro。 Apple Intelligence是iPhone制造商为应对消费者硬件中日益增长的人工智能技术需求和竞争而推出的解决方案…

【高性能服务器】多线程并发模型

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​​ 对于常见的C/…

在CenteOs7上安装mysql8.0(Super详细版)

在CenteOs7上安装mysql8.0 为什么用Mysql8.0&#xff1f;如何下载下载地址需要提前准备下载步骤 服务器上安装如何上传到服务器&#xff1f;通过wget下载到服务器并解压 开始安装非必须安装如果全部安装执行顺序 安装完后&#xff0c;启动mysql使用“systemctl”检测mysqld服务…

前端基础:JavaScript(篇一)

目录 JavaScript概述 JavaScript历史&#xff1a; 须知&#xff1a; 基本语法 变量 代码 运行 数据类型 1、数值型(number)&#xff1a; 代码 运行 2、布尔型(boolean)&#xff1a; 代码 运行 3、字符串型&#xff1a; 代码 运行 4、 undefined类型 代码…

Boss直聘,无良厂商,乱封号

耽误招工作&#xff0c;瞎吉儿封号 哥们单身 需要女生多的公司 问一下都不行&#xff0c;什么尿性 直接就给你封了 装什么呢 辣鸡boss 倒闭吧赶紧 我是狗子&#xff0c;希望你倒闭&#xff01;

GPON-GPON帧链路层知识学习

前言&#xff1a; 引用&#xff1a; gpon学习_gpon帧结构-CSDN博客 了解 GPON 技术 - Cisco GPON、XG(S)-PON基础_网络_门牙会稍息-开放原子开发者工作坊 gpon学习_gpon帧结构-CSDN博客 广域网宽带接入技术七GPON技术_gtc帧-CSDN博客 https://www.cnblogs.com/aliyunyun/…

顶顶通语音信箱手机助手拦截方案

在电话自动外呼系统&#xff0c;常见的问题是被叫号码开通了语音信箱&#xff0c;或者运营商自动给开通了小秘书服务&#xff0c;一旦电话打不通&#xff0c;就会先播放一个类似这样的提示音&#xff0c;你拨打的电话已经开启了来电小秘书&#xff0c;请在滴声后留言。还有一个…

什么是智能仓储

智能仓储是指利用先进的信息技术、物联网技术以及自动化设备&#xff0c;实现仓储管理过程的智能化&#xff0c;通过集成多种现代技术&#xff0c;使得仓库管理更加高效、精准和透明。以下是智能仓储的一些关键特点和技术&#xff1a; --------------------------------------…