解题思路:
N < 10 且时间限定为2s 故采用DFS(深度优先搜索)将所有可能排列枚举 并对每种排列进行处理检查是否符合要求
注意事项:
参考代码:
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int n = 15; ll N, T, vis[n], tag = 0; struct Node { ll Ti, Di, Li; }; struct Node a[n], ans[n]; void dfs(int x){ if(x == N+1){ ll time = ans[1].Ti; int i; for (i = 1;i <= N;i++){ if(ans[i].Ti > time){ time = ans[i].Ti+ans[i].Li; continue; } if((ans[i].Ti+ans[i].Di)<time) break; time += ans[i].Li; } if(i == N+1) tag = 1; return; } for (int i = 1;i <= N;i++){ if(vis[i]) continue; vis[i] = 1; ans[x].Di = a[i].Di; ans[x].Ti = a[i].Ti; ans[x].Li = a[i].Li; dfs(x+1); vis[i] = 0; } } void solve(void){ cin >> N; for (int i = 1;i <= N;i++) cin >> a[i].Ti >> a[i].Di >> a[i].Li; dfs(1); if(tag == 0) cout << "NO" << '\n'; else cout << "YES" << '\n'; } int main(void){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> T; while (T--){ solve(); tag = 0; } return 0; }
0.0分
8 人评分
【亲和数】 (C语言代码)浏览:628 |
1051(奇了怪了)浏览:747 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:755 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:545 |
1134题解(求分析)浏览:795 |
1392题解(大数相加)浏览:640 |
小O的乘积 (C++代码)浏览:796 |
拆分位数 (C语言代码)浏览:464 |
简单的a+b (C语言代码)浏览:691 |
小九九 (C++代码)简单粗暴,直接输出浏览:683 |