淘客返利怎么做网站,网站建设费用计入什么科目,广州做网站的公,提示网站有风险解题思路
这道题目要求我们判断给定的飞机是否都能在它们的油料耗尽之前降落。为了寻找是否存在合法的降落序列#xff0c;我们可以使用深度优先搜索#xff08;DFS#xff09;的方法#xff0c;尝试所有可能的降落顺序。
首先#xff0c;我们需要理解题目中的条件。每架…
解题思路
这道题目要求我们判断给定的飞机是否都能在它们的油料耗尽之前降落。为了寻找是否存在合法的降落序列我们可以使用深度优先搜索DFS的方法尝试所有可能的降落顺序。
首先我们需要理解题目中的条件。每架飞机在 T i T_i Ti 时刻到达机场上空剩余油料可以维持 D i D_i Di 个单位时间降落需要 L i L_i Li 个单位时间。这意味着每架飞机可以在 T i T_i Ti 到 T i D i T_iD_i TiDi 的时间段内开始降落。
然后我们可以按照以下步骤来实现 DFS
首先我们初始化一个布尔数组 st[] 来记录每架飞机是否已经降落。然后我们对每架飞机尝试进行降落。这里的 “尝试” 意味着我们需要检查该飞机是否可以在当前的时间内开始降落即它的开始降落时间是否在 T i T_i Ti 到 T i D i T_iD_i TiDi 的时间段内。如果可以我们就让它降落并把 st[i] 设置为 true。在一架飞机降落之后我们递归地对剩下的飞机进行尝试。这一步就是 DFS 的主要部分我们需要在所有的可能的降落序列中进行搜索。如果在某一步我们发现当前的飞机无法在当前的时间内开始降落我们就返回 false并在上一层中尝试下一架飞机。如果所有的飞机都已经降落我们就返回 true。最后我们对所有飞机进行尝试。如果存在至少一个可以让所有飞机都降落的序列我们就输出 YES否则输出 NO。
通过以上步骤我们可以找出是否存在一个合法的降落序列使得所有的飞机都能在它们的油料耗尽之前降落。
AC_Code
C
#include iostream
#include cstring
#include algorithmusing namespace std;const int N 15;int n;
int a[N], b[N], c[N];
bool st[N];bool dfs(int u, int last, int cnt)
{if (b[u] last)return false;if (cnt n)return true;for (int i 0; i n; i )if (!st[i]){st[i] true;if (dfs(i, max(a[u], last) c[u], cnt 1))return true;st[i] false;}return false;
}int main()
{int T;cin T;while (T -- ){memset(st, 0, sizeof st);cin n;for (int i 0; i n; i )cin a[i] b[i] c[i], b[i] a[i];bool flag false;for (int i 0; i n; i ){st[i] true;if (dfs(i, 0, 1)){flag true;break;}st[i] false;}cout (flag? YES: NO) endl;}return 0;
}Java
import java.util.*;public class Main {static final int N 15;static int n;static int[] a new int[N], b new int[N], c new int[N];static boolean[] st new boolean[N];static boolean dfs(int u, int last, int cnt) {if (b[u] last) {return false;}if (cnt n) {return true;}for (int i 0; i n; i) {if (!st[i]) {st[i] true;if (dfs(i, Math.max(a[u], last) c[u], cnt 1)) {return true;}st[i] false;}}return false;}public static void main(String[] args) {Scanner scanner new Scanner(System.in);int T scanner.nextInt();while (T-- 0) {Arrays.fill(st, false);n scanner.nextInt();for (int i 0; i n; i) {a[i] scanner.nextInt();b[i] scanner.nextInt() a[i];c[i] scanner.nextInt();}boolean flag false;for (int i 0; i n; i) {st[i] true;if (dfs(i, 0, 1)) {flag true;break;}st[i] false;}System.out.println(flag ? YES : NO);}scanner.close();}
}Python
N 15
a, b, c [0]*N, [0]*N, [0]*N
st [False]*Ndef dfs(u, last, cnt):if b[u] last:return Falseif cnt n:return Truefor i in range(n):if not st[i]:st[i] Trueif dfs(i, max(a[u], last) c[u], cnt 1):return Truest[i] Falsereturn FalseT int(input().strip())
for _ in range(T):st [False]*Nn int(input().strip())for i in range(n):a[i], b[i], c[i] map(int, input().strip().split())b[i] a[i]flag Falsefor i in range(n):st[i] Trueif dfs(i, 0, 1):flag Truebreakst[i] Falseprint(YES if flag else NO)【在线测评】