序号:1844
最大利润(Easy)
Time Limit:1s Memory Limit:128MB
题目描述
超市里有n个产品要卖,每个产品都有一个截至时间dx(从开始卖时算起),只有在这个截止时间之前才能卖出并且获得率润dy。
有多个产品,所有可以有不同的卖出顺序,每卖一个产品要占用1个单位的时间,问最多能卖出多少利润。
输入格式
第一行1个整数n,表示有n个产品。(1≤n≤8000)
接下去n行,每行2个整数,用空格分隔,分别表示一个产品的利润和截止时间
输出格式
1个整数,表示最大能获得的利润
输入输出样例
输入
4
50 2
10 1
20 2
30 1
输出
80
#include<bits/stdc++.h>
using namespace std;
int n;
typedef pair<int, int> PII;
int main() {
cin >> n;
int res = 0;
vector<PII> vec(n);
priority_queue<int, vector<int>, greater<int>>heap;
for (int i = 0; i < n; i++) cin >> vec[i].second >> vec[i].first;
sort(vec.begin(), vec.end());
for (auto p : vec) {
heap.push(p.second);
if (heap.size() > p.first) {
heap.pop();
}
}
while (heap.size()) {
res += heap.top();
heap.pop();
}
cout << res;
return 0;
}