#include <iostream>
#include<bits/stdc++.h>
using namespace std;
const int N=10+20;
struct plane{
int t,d,l;
}p[N];
bool st[N];//判断当前飞机是否已经降落
int n;//飞机个数
bool dfs(int u,int time){
//u表示已经有u架飞机降落
//time表示当前时间
if(u>=n){
return true;
}
//考虑第(u+1)架飞机降落
for(int i=0;i<n;i++){
if(!st[i]){
st[i]=true;
if(p[i].t+p[i].d<time){
//回溯,回溯到DFS之前的状态
st[i]=false;
return false;
}
int t=max(time,p[i].t)+p[i].l;
if(dfs(u+1,t))
return true;
//回溯,回溯到DFS之前的状态
st[i]=false;
}
}
return false;
}
void solve(){
cin>>n;
for(int i=0;i<n;i++){
cin>>p[i].t>>p[i].d>>p[i].l;
}
if(dfs(0,0))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
for(int i=0;i<n;i++){
st[i]=false;
}
}
int main()
{
// DFS枚举
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
蓝桥杯刷题-02-飞机降落
于 2024-04-03 10:41:08 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)