贪心思想,每次选能承受队伍人数最多的那个人,如果队伍人数满了的话,排除掉能力值最低的那个,然后加入新的那个人,用一个变量存储这个过程中的最大值

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
struct node {
    long long v;
    int s;
};
const int maxn = 100010;
node arr[maxn];
priority_queue<long long, vector<long long>,greater<long long>>q;
bool cmp(node a, node b) {
    return a.s > b.s;
}
int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> arr[i].v >> arr[i].s;
    }
    sort(arr + 1, arr + n + 1, cmp);

    long long res = 0;
    long long ans = 0;
    for (int i = 1; i <= n; i++) {
        ans += arr[i].v;
        q.push(arr[i].v);
        while (q.size() > arr[i].s) {
           // cout << q.top() << " a"<<endl;
            ans -= q.top();
            q.pop();
        }
        res = max(res,  ans);
    }
    cout << res;
}