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;
} 
posted @ 2025-04-01 21:33  Yuhhhhh  阅读(62)  评论(0)    收藏  举报