125. 耍杂技的牛
结论:
证明: 第一个不用证明,很明显
第二个:
假设wi+si>w(i+1)+s(i+1)
由于wi+si > w(i+1)+s(i+1) wi+si > si 所以交换后 两头牛的风险的最大值一定是小于交换前两头牛的风险的最大值的! 那么总体的风险的最大值就不可能增加,只可能不变或减小。所以得证。
所以我们就按wi+si从小到大的顺序依次从上到小安排牛,这样的风险的最大值就会是所有情况里的最小值
#include#include using namespace std; const int N = 50010; typedef pair<int, int> PII; PII q[N]; int n; int main() { cin >> n; for(int i = 0; i < n; i++) { int w, s; cin >> w >> s; q[i] = {w + s, s}; } sort(q, q + n); int ans = -2e9, sum = 0; // sum = 0 表示最上面的那头牛的上面的牛的重量为0 (即没有牛) 然后依次往下面增加上面牛的重量 for(int i = 0; i < n; i++) { int s = q[i].second, w = q[i].first - s; ans = max(ans, sum - s); sum += w; } cout << ans << endl; return 0; }