#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
struct plane {
int t, d, l;
};
int t, n;
plane planes[15];
int v[15] = {0};
bool dfs(int depth, int endtime) {
if (depth > n) {
return true;
}
for (int i = 0; i < n; i++) {
if (v[i] || endtime > planes[i].t + planes[i].d)
continue;
v[i] = 1;
// 之前的条件检查中已经确保了每架飞机都能在其最晚开始降落时间之前降落。
if (dfs(depth + 1, max(planes[i].t, endtime) + planes[i].l)) {
v[i] = 0;
// 如果这个内部的DFS调用返回true,它表示从当前深度depth开始,找到了一种所有飞机都能按时降落的方法。
return true;
}
v[i] = 0; // 将这一行移出if语句,确保状态总是被重置
}
return false;
}
int main() {
cin >> t;
while (t--) {
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> planes[i].t >> planes[i].d >> planes[i].l;
}
memset(v, 0, sizeof(v)); // 重置v
if (dfs(1, 0))
cout << "YES\n";
else
cout << "NO\n";
}
return 0;
}
P9241 [蓝桥杯 2023 省 B] 飞机降落(DFS)
最新推荐文章于 2024-07-20 09:51:47 发布