飞机降落(DFS)
蓝桥杯2023年第十四届省赛真题-飞机降落 - C语言网 (dotcpp.com)
一开始我是真的没想到用DFS做,我还在想用什么策略排序呢。需要再刷!!!
双马尾的意思其实是刷了两次...
一刷:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//这道题是真的牛逼。他没有策略,而是用DFS遍历所有情况,然后判断每一种情况可不可行,
//如果所有的都不可行,那就说明总的不可行
//真的无脑我去
struct Plane
{
int t; //到达时间
int d; //盘旋时间
int l; //降落时间
};
int n, cnt;
vector<Plane>flys;
vector<int>visit(11); //记录
bool DFS(int num,int last) //已经降落的数量 最后降落时间
{
if (num==cnt)
return true;
for (int i = 0; i < cnt; i++)
{
if (visit[i] == 0 && last <= flys[i].t + flys[i].d)
{
visit[i] = 1;
//现在的last应该是最近能降落的时间+降落持续时间
if (DFS(num + 1, max(last, flys[i].t) + flys[i].l)) //如果之后的所有情况都可以实现
return true;
visit[i] = 0;
}
}
return fa