先加工1,再加工2
t1=a1+max(b1,a2)+b2;
先加工2,再加工1
t2=a2+max(b2,a1)+b1;
假设t1<t2
于是有
max(b1,a2)-a2-b1<max(b2,a1)-a1-b2
-min(b1,a2)<-min(a1,b2)
min(b1,a2)>min(a1,b2)
但是这个好像有问题。。
我们还是用这个
我们设d=sign(a-b)
d=-1 a<b
d=0 随便
d=1 a>b
这样排序就好了,但是也不是很懂。。
还是用第一个吧,好像没问题
const int N = 1e5 + 79;
struct data {
int a, b;
bool operator <(const data &rhs)const {
return min(a, rhs.b) < min(rhs.a, b);
}
} p[N];
int n;
int main() {
freopen("universe.in","r",stdin);
freopen("universe.out","w",stdout);
read(n);
rep(i, 1, n) {
read(p[i].a);
read(p[i].b);
}
std::sort(p + 1, p + n + 1);
int ta(0), tb(0);
rep(i, 1, n) {
ta += p[i].a;
tb = max(ta, tb) + p[i].b;
}
out(tb, '\n');
return 0;
}