题目描述:
N 架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 Ti 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di 个单位时间,即它最早
可以于 Ti 时刻开始降落,最晚可以于 Ti + Di 时刻开始降落。降落过程需要 Li个单位时间。
一架飞机降落完毕时,另一架飞机可以立即在同一时刻开始降落,但是不能在前一架飞机完成降落前开始降落。
请你判断 N 架飞机是否可以全部安全降落。
代码:
package lanqiao;
import java.math.BigInteger;
import java.util.*;
public class Main {
static int k,n;
static feiji[] feiji;
static boolean[] visited;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
k = sc.nextInt();
while(k -- > 0){
n = sc.nextInt();
feiji = new feiji[n];
for(int i = 0;i < n;i ++)
{
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
feiji[i] = new feiji(a,b,c);
}
visited = new boolean[n];
if(dfs(0,0)){
System.out.println("YES");
}else{
System.out.println("NO");
}
}
}
public static boolean dfs(int fj,int lasttime){
if(fj == n)
{
return true;
}
for(int i = 0;i < n;i ++){
if(!visited[i] && feiji[i].t +feiji[i].d >= lasttime){
visited[i] = true;
//更新lasttime
if(dfs(fj + 1,Math.max(lasttime,feiji[i].t) + feiji[i].l))
{
return true;
}
visited[i] = false;
}
}
return false;
}
}
class feiji{
int t,d,l;
public feiji(int t,int d,int l)
{
this.t = t;
this.d = d;
this.l = l;
}
}