#include<iostream>
using namespace std;
const int N = 15;
//创建飞机结构体
struct plane {
int Ti, Di, Li;
}p[N];
bool vis[N];//判断飞机是否被选取过
int t;//用户输入的数据数
int n;//用户输入的飞机数
bool dfs(int u,int now)//表示当前已有n架飞机成功降落,上架飞机降落的时间为now
{
if (u >= n)return true;//当所有飞机都能降落时,结束递归
for (int i = 0; i < n; i++)
{
//当目前的飞机=false时,表示未降落过,可以降落;当现架飞机处于可降落状态且到达时间+下降时间>=前架飞机的降落时间时
if (vis[i] == false&& p[i].Ti + p[i].Di >= now)
{
vis[i] = true;//可以降落此飞机
//查看下一架飞机是否符合降落条件,此时已降落飞机+1,同时找到上架飞机降落的最后时间和本架飞机到达的时间谁大,找到较大值再加上下降时间
if (dfs(u + 1, max(p[i].Ti, now) + p[i].Li))
return true;//全部符合则返回true
vis[i] = false;//若不符合则回溯,使飞机重新处于可降落状态
}
}
return false;//遍历所有条件后依然没有一个符合全部降落条件则返回false,表示不能达到要求
}
int main()
{
cin >> t;//用户输入数据数
while (t--)//设置循环结束条件
{
cin >> n;//拿到飞机数
for (int i = 0; i < n; i++)//拿到所有飞机的到达时间,飞行时间,下降时间
{
int t, d, l;
cin >> t >> d >> l;
p[i] = { t,d,l };//同时赋值给结构体
}
for (int i = 0; i < n; i++)//给所有飞机赋值false,使全部处于可降落状态
vis[i] = false;
if (dfs(0, 0))cout << "YES" << endl;//当所有飞机都可下落则输出yes,反之输出no
else cout << "NO" << endl;
}
return 0;
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题8.4 (C++代码)浏览:616 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:619 |
C语言训练-最大数问题 (C语言代码).........关于-1浏览:762 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:3481 |
printf基础练习2 (C语言代码)浏览:605 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1327 |
【金明的预算方案】 (C++代码)浏览:997 |
1011题解浏览:819 |
计算质因子 (C语言代码)浏览:778 |
整数平均值 (C语言代码)浏览:856 |