我们可以证明,本题的最优解即为max(总上山时间+最快奶牛下山时间,总下山时间+最快奶牛上山时间)
首先我们可以知道,当上山总时间大于下山总时间时,所有奶牛总上山时间恒定。
而最后总有一只奶牛在上山总时间后在山顶,要想最优,只要让在山上的那只奶牛下山时间最小即可。
下山同理,当上山总时间小于下山总时间时,所有奶牛总下山时间恒定。
在下山之前,总有一只奶牛在山顶(否则他还没上山就下山可能吗),要想最优,只要让在山上的那只奶牛上山时间最小即可
边读边做,每次读入累加上山和下山时间和记录最小上山下山时间最后去max即可
#include <bits/stdc++.h>
#define il inline int
#define re register int
#define LL long long
const int N = 5201314;
using namespace std;
int n,m;
int u,d,p,q;
int minu=N,mind=N;
int main(){ scanf("%d",&n); for ( re i=1;i<=n;i++){ scanf("%d%d",&u,&d); p+=u;q+=d; if(u<minu) minu=u; if(d<mind) mind=d; } cout<<max(p+mind,q+minu); return 0;
}