有两个数字, 保质期和利益, 我们拿的是pair来排序,所以排序是先分first 如果first
相同则分second ,所以保质期为first 利益为second 然后按顺序比较加入就好了
C++ 代码
#include<bits/stdc++.h>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
int n;
int main()
{
while(cin >> n)
{
vector<PII> ve(n);
for(int i = 0; i < n; i ++)
{
cin >> ve[i].second >> ve[i].first;
}
sort(ve.begin(),ve.end());
priority_queue<int, vector<int>,greater<int>> heap; // 小根堆,从小到大排序
for(auto a : ve)
{
heap.push(a.second);
if(heap.size() > a.first) heap.pop(); //如果保质期已经超了,踢出去
}
int ans = 0;
while(heap.size())
{
ans += heap.top();
heap.pop();
}
cout << ans << endl;
}
return 0;
}