题目描述
解题思路
#include <iostream>
#include <vector>
using namespace std;
typedef struct {
int t,d,l;
}plane;
int n;
int flag;
void dfs(int *vis,int m,int cnt,int last,vector<plane>&p){
if(cnt==m){
flag=1;
return;
}
for(int i=0;i<m;i++){
if(!vis[i]&&p[i].t+p[i].d>=last){
vis[i]=true;
dfs(vis,m,cnt+1,max(last,p[i].t)+p[i].l,p);
vis[i]=false;
}
}
}
int main(){
cin>>n;
while(n--){
int m;
cin>>m;
int b=m;
vector<plane>v(m);
while(m--){
cin>>v[m].t>>v[m].d>>v[m].l;
}
int vis[b]={};
flag=0;
dfs(vis,b,0,0,v);
if(flag==1) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}