赞
踩
样例输入:
- 2
- 3
- 0 100 10
- 10 10 10
- 0 2 20
- 3
- 0 10 20
- 10 10 20
- 20 10 20
样例输出:
- YES
- NO
分析:这道题看了一下数据范围,就知道可以直接全排列枚举去做,对于一个正在枚举的降落顺序,如果轮到第i个飞机降落,如果当前时间没有超过飞机的最晚降落时间,就让飞机尽可能地早降落,如果当前时间飞机已经来了则直接开始降落,否则等飞机来了就降落,复杂度不会超时。
细节见代码:
- #include<iostream>
- #include<cmath>
- #include<queue>
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- const int N=15;
- int t[N],d[N],l[N];
- int a[N];
- int main()
- {
- int T;
- cin>>T;
- while(T--)
- {
- int n;
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- scanf("%d%d%d",&t[i],&d[i],&l[i]);
- for(int i=1;i<=n;i++)
- a[i]=i;
- bool flag=false;
- do
- {
- int now=0;
- for(int i=1;i<=n;i++)
- {
- if(now<=t[a[i]]+d[a[i]])
- now=l[a[i]]+max(now,t[a[i]]);
- else
- break;
- if(i==n) flag=true;
- }
- if(flag) break;
- }while(next_permutation(a+1,a+n+1));
- if(flag) puts("YES");
- else puts("NO");
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。