算法
(模拟) $O(n^2)$
不难看出有两种分配工作的方式:
- 串行:两份工作都交给同一个人做,所需时间为这个人完成每份工作的时间总和
- 并行:两份工作分别交给不同的人,所需时间为两个人完成不同工作的最大完成时间
然后二者取最小值即可。
C++ 代码
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using std::cin;
using std::cout;
using std::max;
using std::min;
using std::vector;
int main() {
int n;
cin >> n;
vector<int> a(n), b(n);
rep(i, n) cin >> a[i] >> b[i];
int ans = 1001001001;
rep(ai, n)rep(bi, n) {
int now = 0;
if (ai == bi) now = a[ai] + b[bi];
else now = max(a[ai], b[bi]);
ans = min(ans, now);
}
cout << ans << '\n';
return 0;
}