solution
数据量不大,dfs即可
#include<iostream>
#include<algorithm>
using namespace std;
int t, n, ans;//ans本次查询是否能安全降落
struct plane{
int t, d, l, flag;
}p[15];
void dfs(int cur, int last){
if(cur == n) {//所有的飞机都可以降落,则有安全方案
ans = 1;
return;
}
for(int i = 0; i < n; i++){
if(!p[i].flag && p[i].t + p[i].d >= last){//对于没有降落的飞机,判断是否满足可盘旋的最晚时间不晚于轮到它的时间
p[i].flag = 1;//来得及,可以降落
dfs(cur + 1, max(last, p[i].t) + p[i].l);//在此基础上继续
p[i].flag = 0;
}
}
}
int main(){
scanf("%d", &t);
while(t--){
scanf("%d", &n);
for(int i = 0; i < n; i++){
cin >> p[i].t >> p[i].d >> p[i].l;
p[i].flag = 0;//初始化,未降落
}
ans = 0;//默认不能全部降落
dfs(0,0);//与顺序无关,所以记录的是可以降落的飞机数量;轮到当前飞机过了last时间
if(ans) printf("YES\n");
else printf("NO\n");
}
return 0;
}