十四届蓝桥杯B组3511飞机降落

问题描述

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

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

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

输入格式

输入包含多组数据。

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

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

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

输出格式

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

样例输入

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

样例输出

YES
NO

样例说明

对于第一组数据,可以安排第 33 架飞机于 00 时刻开始降落,2020 时刻完成降落。安排第 22 架飞机于 2020 时刻开始降落,3030 时刻完成降落。安排第 11 架飞机于 3030 时刻开始降落,4040 时刻完成降落。

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

评测用例规模与约定

对于 3030% 的数据,�≤2N≤2。

对于 100100% 的数据,1≤�≤101≤T≤10,1≤�≤101≤N≤10,0≤��,��,��≤1050≤Ti​,Di​,Li​≤105。

运行限制

语言最大运行时间最大运行内存
C++2s256M
C2s256M
Java3s256M
Python34s256M
PyPy34s256M
Go4s256M
JavaScript4s256M
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp(vector<int>&a,vector<int>&b)
{
	return a[0] > b[0];
}
int ans[100] = { 0 };//表示路径
int mark[100] = { 0 };//表示是否遍历
bool flag;//表示安全?
int a[20][3];
int count1 = 0;
void dfs(int n,int time,int N) //表示 当前第几架飞机、前一架飞机降落时间、表示总飞机数
{
	
	if (n >= N)
	{
		flag = true;
		return;
	}

	for (int i = 0; i < N; i++)
	{
		if (mark[i] != 1)//如果这次没遍历过并且这架飞机在空中的时间大于上架飞机降落完成
		{
			if (a[i][0] + a[i][1] >=time)
			{
				mark[i] = 1;
			dfs(n+ 1, max(time, a[i][0]) + a[i][2], N);
			mark[i] = 0;
		    }
			
			
		}

	}
	
}
int main()
{
	int n, N;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> N;
		for (int j = 0; j < N; j++)
		{
			
			cin >> a[j][0] >> a[j][1] >> a[j][2];
		}
		flag = false;
		dfs(0, 0, N);
		if (flag == true)
		{
			cout << "YES" << endl;
		}
		else
			cout << "NO" << endl;
	}
	return 0;
}

 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要焦虑啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值