知识点:贪心,堆
难度:4
这个是和supermarket完全一样的题,输入的时候稍微转换一下就行了,题目有说截至时间,然后告诉你每个任务几天后才能拿到工资,那么意思就是这个任务想拿到工资就要在多少天之前开始干,然后也是一天的时间干一个,所以,完全是和超市一样的反悔贪心+堆
注意开始天数小于1到不能算进结果
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
pair<int, int> a[N];
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
int x, y;
scanf("%d%d", &x, &y);
a[i] = make_pair(m - x + 1, y);
}
sort(a + 1, a + n + 1);
priority_queue<int, vector<int>, greater<int>> q;
int ans = 0;
for (int i = 1; i <= n; i++) {
if (a[i].first < 1) continue;
if ((int) q.size() < a[i].first) {
q.push(a[i].second);
ans += a[i].second;
} else if (a[i].second > q.top()) {
q.push(a[i].second);
ans += a[i].second - q.top();
q.pop();
}
}
cout << ans;
return 0;
}