目录
题目
4957. 飞机降落 - AcWing题库https://www.acwing.com/problem/content/description/4960/
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int T = input.nextInt();//数据组数
for(int i = 0; i < T; i++) {
int N = input.nextInt();//飞机数
int[][] a = new int[N + 1][3];
a[0][0] = 0;//Ti
a[0][1] = 0;//Di
a[0][2] = 0;//Li
for(int j = 1; j < N + 1; j++) {
a[j][0] = input.nextInt();
a[j][1] = input.nextInt();
a[j][2] = input.nextInt();
}
boolean[] state = new boolean[N + 1];//记录飞机降落状态
boolean[] flag = new boolean[1];
flag[0] = false;//记录是否找到安全的降落方案
dfs(0,state,flag,0,N,a);
//输出打印
if(flag[0]) {
System.out.println("YES");
}else {
System.out.println("NO");
}
}
}
//深度优先搜索
public static void dfs(int k,boolean state[],boolean[] flag,int t,int N,int a[][]) { //t记录时刻
//出口
if(flag[0]) {
return;
}
//判断是否为可行方案
if(k == N) {
flag[0] = true;
}
for(int i = 1; i < state.length; i++) {
if(!state[i]) {//第i架飞机没有降落
int tempt = t;
if(t <= a[i][0] + a[i][1]) {//可以降落
state[i] = true;
if(t < a[i][0]) {//等飞机到了再降落
t = a[i][0] + a[i][2];
}else {//a[i][0] < t < a[i][0] + a[i][1] 飞机已经到了,直接降落
t = t + a[i][2];
}
}else{//t > a[i][0] + a[i][1]->炸了
return;
}
dfs(k+1,state,flag,t,N,a);
/