P9241 [蓝桥杯 2023 省 B] 飞机降落(暴搜)
AcCode:
#include<bits/stdc++.h>
using namespace std;
struct Data{
int t, d, l;
};
bool flag;
vector<Data> a;
bool vis[20];
void dfs(int step, int Pan){
if(flag) return;
if(step == a.size()){
flag = true;
return;
}
for(int i = 0; i < a.size(); i++){
if(!vis[i]){
int e = a[i].t; //最早可降落时间
int l = a[i].t + a[i].d; //最迟降落时间
//如果飞机还没到,更新下一次DFS的Pan时间,如果已经在盘旋(Pan > e),则Pan不变
//但是如果Pan已经大于了最迟降落时间,那么说明这架飞机已经没时间降落了,后续不用看,直接return
int P = max(Pan, e);
if(Pan > l) return;
vis[i] = true;
dfs(step + 1, P + a[i].l);
vis[i] = false;
}
}
}
int main(){
int N;
cin >> N;
while(N--){
memset(vis, 0, sizeof(vis));
flag = false;
a.resize(0);
int M;
cin >> M;
for(int i = 1; i <= M; i++) {
int ti, di, li;
cin >> ti >> di >> li;
a.push_back({ti, di, li});
}
dfs(0, 0);
if(flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}