算法学习笔记(55)——推公式

推公式

题目链接:AcWing 125. 耍杂技的牛

先给出结论:
按照W[i]+S[i]从小到大的顺序排,最大的危险系数一定是最小的。

证明思路:
贪心得到的答案 \(\ge\) 最优解
贪心得到的答案 \(\le\) 最优解

#include <iostream>
#include <algorithm>

using namespace std;

typedef pair<int, int> PII;

const int N = 50010;

int n;
PII cow[N];

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++ ) {
        int w, s;
        cin >> w >> s;
        cow[i] = {w + s, w};
    }
    
    sort(cow, cow + n);
    
    int res = -2e9, sum = 0;
    for (int i = 0; i < n; i ++ ) {
        int w = cow[i].second, s = cow[i].first - w;
        res = max(res, sum - s);
        sum += w;
    }
    
    cout << res << endl;
    
    return 0;
}
posted @ 2023-01-11 23:14  S!no  阅读(36)  评论(0编辑  收藏  举报