题目描述
N 架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 Ti 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di 个单位时间,即它最早
可以于 Ti 时刻开始降落,最晚可以于 Ti + Di 时刻开始降落。降落过程需要 Li个单位时间。
一架飞机降落完毕时,另一架飞机可以立即在同一时刻开始降落,但是不能在前一架飞机完成降落前开始降落。
请你判断 N 架飞机是否可以全部安全降落。
思路
一开始绞尽脑汁地推贪心。nmm嘞,不是简单题嘛,这么难?最终放弃。看到题解两个字"暴力"我就懂了。原来是我不信任蓝桥杯了,而不是他变心了。。我爱"暴力杯"!!
为了减少思考,懒得写dfs的可以直接用next_permutation。自动全排列。不用动脑子的感觉真好!
代码
#include<bits/stdc++.h>
using namespace std;int n;
int t[12],d[12],l[12];
int pos[12];
bool check(){int now=0;for(int i=0;i<n;i++){int k=pos[i];if(t[k]+d[k]<now){return false;}now=max(now,t[k])+l[k];}return true;
}
void solve(){cin>>n;for(int i=0;i<n;i++){cin>>t[i]>>d[i]>>l[i];}for(int i=0;i<n;i++)pos[i]=i;do{if(check()){cout<<"YES"<<endl;return ;}}while(next_permutation(pos,pos+n));cout<<"NO"<<endl;
}
int main(){int T;cin>>T;while(T--){solve();}
}