飞机降落next_permutation写法
过不了所有数据,考试的时候可以直接用
#include <bits/stdc++.h>
using namespace std;
const int N = 25;
int n, T;
struct P {
int a; // 初始时间
int b; // 结束时间
int c; // 下落时间
};
P p[N];
void dfs(int &flag)
{
vector<int> id(n); // 创建一个索引数组
for(int i=0;i<n;i++){
id[i]=i+1;
}
do {
int time = 0;
for (int i = 0; i < n; i++) {
int idx = id[i]; // 获取当前排列下的索引
if (time <= p[idx].b)
{
time = max(time, p[idx].a) + p[idx].c;
}
else {
break;
}
if (i == n - 1) {
flag = 1;
return;
}
}
} while (next_permutation(id.begin(), id.end()));
}
void solve() {
int flag = 0;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> p[i].a >> p[i].b >> p[i].c;
p[i].b += p[i].a; // 计算结束时间
}
dfs(flag);
if (flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
int main()
{
cin >> T;
while (T--)
solve();
}