P151
方法:按照wi + si 从小到大排序,结果一定 是最优的,即最大危险系数是最小的
做法:使用 pair<int, int>
存每头牛的wi和si的值,然后按wi + si排序
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
const int N = 1e5 + 10;
int n;
PII cow[N];
int main () {
scanf("%d", &n);
for (int i = 0; i < n; i ++) {
int w, s;
scanf("%d%d", &w, &s);
cow[i] = {w + s, w}; //按w+s排序,所以需要使用pair<int, int> 来存储w+s的值,对第一个参数排序,第二个参数存w,s都行,只是后面写法稍微有区别
}
sort(cow, cow + n); //按w+s排序
int sum = 0, res = -2e9;
for (int i = 0; i < n; i ++) {
int w = cow[i].second;
int s = cow[i].first - w;
res = max(res, sum - s); //当前牛的危险系数sum-s
sum += w; //sum加上当前牛的重量,为下一轮循环准备
}
cout << res << endl;
return 0;
}