int Ti[15],Di[15],Li[15];
bool judge[15];
int arr[15];
bool T;
int n;
void dfs(int u,int Tn) //u表示当前位置 Tn表示当前时间
{
if (u > n)
{
T = true;
return;
}
for (int i = 1; i <= n; i++)
{
//1.根据限制放在当前位置
if (!judge[i])
{
//2.递归到下一层,注意更新judge
if(Tn < Ti[i])
{
arr[u] = i;
judge[i] = true;
dfs(u + 1, Ti[i] + Li[i]);
}
else if (Tn >= Ti[i] && Tn <= Ti[i] + Di[i])
{
arr[u] = i;
judge[i] = true;
dfs(u + 1, Tn + Li[i]);
}
else if(Tn>Ti[i]+Di[i])
{
continue;
}
}
else
{
continue;
}
//3.恢复状态
judge[i] = false;
arr[u] = 0;
}
}
int main()
{
int N;
cin >> N;
while (N--)
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> Ti[i] >> Di[i] >> Li[i];
}
dfs(1, 0); //初始位置为1,当前时间为0
if (T)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
T = false;
}
return 0;
}
飞机降落--dfs
于 2024-04-08 17:22:04 首次发布