P9241 [蓝桥杯 2023 省 B] 飞机降落
https://www.luogu.com.cn/problem/P9241

这道题的难点就是顺序问题,那么可以设置一个标记数组,访问没有标记过的。同时控制进程和时间
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=15;
int book[N],n,T;
struct plane{
int t,d,l;
}a[N];
bool dfs(int dep,int t){
if(dep==n){
return true;
}
for(int i=0;i<n;i++){
if(book[i]||a[i].t+a[i].d<t){
continue;
}
book[i]=1;
if(dfs(dep+1,max(t,a[i].t)+a[i].l)){
book[i]=0;//成功时返回前回溯
return true;//找到可行方案,立即返回
}
book[i]=0;//失败时回溯
}
return false;
}
int main(){
cin>>T;
while(T--){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].t>>a[i].d>>a[i].l;
}
memset(book,0,sizeof book);
if(dfs(0,0)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}