📦1202: 보석 도둑
[알고리즘 풀이] 강동규
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-18
문제 확인하기
풀이
- 가방 안에만 들어가면 되기 때문에 가방 안에 들어가는 무게를 가진 보석들을 전부 우선순위 큐에 넣는다.
- 우선순위 큐는 가격이 높은 순을 기준으로 정렬하고 가방 개수만큼 뽑아낸다.
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#define endl '\n'
using namespace std;
int N, K;
long long res=0;
pair<int, int> jewelry[300001];
int bag[300001];
priority_queue<int> pq;
void Input(){
cin >> N >> K;
for(int i=0; i<N; i++){
int m, v;
cin >> m >> v;
jewelry[i] = make_pair(m, v);
}
for(int i=0; i<K; i++){
cin >> bag[i];
}
}
void Solution(){
sort(jewelry, jewelry+N);
sort(bag, bag+K);
int j = 0;
for(int i=0; i<K; i++){
while(j < N && bag[i] >= jewelry[j].first){
pq.push(jewelry[j].second);
j++;
}
if(!pq.empty()){
res += pq.top();
pq.pop();
}
}
cout << res << endl;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
Input();
Solution();
return 0;
}