首页 > 其他分享 >[蓝桥杯 2023 省 B] 飞机降落

[蓝桥杯 2023 省 B] 飞机降落

时间:2025-01-20 22:46:38浏览次数:1  
标签:used int 蓝桥 dep lst MAXN 2023 降落

[蓝桥杯 2023 省 B] 飞机降落

原题链接: P9241 [蓝桥杯 2023 省 B] 飞机降落

解题思路

考虑直接暴力的话,时间复杂度为 \(O(n!×n×t)\) 。

首先,选择出这 \(n\) 架飞机的降落顺序,再按照题目模拟,能降就降。

如果已经判断出来可以,那么在后面的 \(DFS\) 中直接退出即可。

在已经判断判断出可以降落时,要注意上一架飞机降落时间是否是小于当前飞机到达时间

DFS过程:

首先设立一个为变量 \(k\) ,代表是否可以全部安全降落。即当 \(k\) 是 $true $ 时,输出 \(YES\);\(k\) 是 \(false\) 时,输出 \(NO\)。 再设立一个变量 \(used\),对于每一个 \(used_i\) ,表示第 \(i\) 架飞机是否已经降落。

设立一个状态,包含 \(dep\) 和 \(lst\) ,分别对应此时递归的步数和当前的时间。

对于每一个状态,枚举 \(n\) 次,若此时 \(T_i + D_i < lst\) ,即存在更好的方案,就 \(return\)。

若此时 \(T_i + D_i < lst\)且 \(used_i = 1\) ,就将 \(used_i\) 设为1,再通过这个状态转移下去,转移式:\(dfs(dep+1,max(T_i,lst)+L_i)\) 。

在每一个 \(dfs\) 开始前,先判断 \(dep\) 是否大于 \(n\)。若大于 \(n\) ,就将 \(k\) 设为1。

注意:转移结束后记得重置 \(used_i\) 。

参考代码

#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int MAXN=10+5;
int n;
int t[MAXN];
int d[MAXN];
int l[MAXN];
int start[MAXN], end[MAXN];
int used[MAXN];
int last=-1;
bool k=0;
int dfs(int dep,int lst){
    if(dep>n){
        k=1;
        return 0;
    }
    if(k)return 0;
    for(int i=1;i<=n;i++){
        if(!used[i]){
            if (t[i]+d[i]<lst) eturn 0;
            used[i]=1;
            dfs(dep+1,max(t[i],lst)+l[i]);
            used[i]=0;
        }
    }
    return 0;
}
int main(){
	int T;
    cin>>T;
    while(T--){
        k=0;
        memset(used,0,sizeof used);
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>t[i]>>d[i]>>l[i];
        dfs(1,-1);
        if (k)cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
    }
}

标签:used,int,蓝桥,dep,lst,MAXN,2023,降落
From: https://www.cnblogs.com/zyihan-crz/p/18682616

相关文章

  • [蓝桥杯 2023 省 B] 接龙数列
    [蓝桥杯2023省B]接龙数列原题链接:P9242[蓝桥杯2023省B]接龙数列解题思路计算去掉的数量不好思考,可以先算出最长的接龙数列长度,与\(n\)相减即为答案。考虑使用动态规划计算。令\(dp_i\)为以\(i\)结尾的最长序列,枚举到\(a_i\)时:设\(a_i\)开头数字为\(p\)......
  • [蓝桥杯 2023 省 B] 冶炼金属
    [蓝桥杯2023省B]冶炼金属原题链接:洛谷P9240[蓝桥杯2023省B]冶炼金属解题思路1.当\(b\)变成\(b+1\),即再造一个特殊金属\(X\)时,\(V=\lfloor\frac{a}{b+1}\rfloor\),此时为刚好不满足条件的情况,所以\(V=\lfloor\frac{a}{b+1}\rfloor+1\)为满足条件......
  • 蓝桥杯 单词重排
    问题描述解题思路这个问题可以通过计算排列数来解决。由于字符串"LANQIAO"由7个不同的字母组成,我们可以使用排列公式P(n,n)=n!来计算,其中n是字母的数量。但是,由于字符串中存在重复的字母,我们需要对重复的字母进行处理。在这个问题中,字母'A'和'O'各出现了两次。因......
  • 冲刺蓝桥杯之速通vector!!!!!
    文章目录知识点创建增删查改习题1习题2习题3习题4:习题5:知识点C++的STL提供已经封装好的容器vector,也可叫做可变长的数组,vector底层就是自动扩容的顺序表,其中的增删查改已经封装好创建constintN=30;vector<int>a1;//创建叫a1的空的可变长的数组vector<int>a2......
  • 蓝桥杯备赛笔记(九)动态规划(一)
    1.动态规划基础(1)线性DP1)什么是DP(动态规划)DP(动态规划)全称DynamicProgramming,是运筹学的一个分支,是一种将复杂问题分解成很多重叠的子问题,并通过子问题的解得到整个问题的解的算法。在动态规划中有一些概念:状态:就是形如dp[i][j]=val的取值,其中i,j为下标,也是用于描述、......
  • Xmind 2023 v23 pro 破解版下载及安装教程
    Xmind应该是目前最好用的一款思维导图软件了。拥有优秀的用户体验,凭借简单易用,功能强大的特点,XMind在2013年被著名互联网媒体Lifehacker评选为全球最受欢迎的思维导图软件。Xmind具有如下优点①、用心打磨16年的思维导图软件②、评分高,多次获得推荐③、装机量超过1亿,深受全......
  • 备赛蓝桥杯——day4:C++篇
    第二章:C/C++输入输出(上)1.getchar和putchargetchar()和putchar()是属于C语⾔的库函数,C++是兼容C语⾔的,所以C++中只要正确包含头⽂件也可以正常使⽤这两个函数。1.1getchar函数原型:intgetchar(void);getchar()函数返回用户从键盘输入的一个字符(本质是返回他的asc码值),......
  • 202312 青少年软件编程等级考试C/C++ 二级真题答案及解析(电子学会)
    第1题统计指定范围里的数给定一个数的序列S,以及一个区间[L,R],求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。时间限制:1000内存限制:65536输入第一行1个整数n,表示序列的长度。(0<n≤10000) 第二行n个正整数,表示序列里的每一个数,每个数小于等......
  • 蓝桥杯单片机基础部分——5、DS18B20温度传感器
    前言好久没有更新关于蓝桥杯单片机相关的模块了,今天更新一下数字温度传感器DS18B20的相关应用单线数字温度计DS1820介绍DS1820数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DS1820或从DS1820送出,因此从主机CPU到DSl820仅需一条线(和地线)......
  • P9730 [CEOI2023] Grading Server
    这是什么神仙题啊。本题主要思路:优化转移决策,减少dp状态。我们发现减一层盾其实就是给自己加攻击,所以我们将初始生命值(攻击力)\(C_H\)和\(C_G\)重新表示为\(A_1=C_H-f_GS\),\(A_2=C_G-f_HS\),让\(F_1=f_G\),\(F_2=f_H\)。现在的点对就是\((A_1,F_1,A_2,F_......