코딩캠프
1202 보석도둑
by 코곰_
2024. 2. 14.
// 1202 보석도둑 -> 왜 시간초과일까 ㅜ
// heap 응용
#include <bits/stdc++.h>
using namespace std;
int x;
int n, k;
int m, v;
int bagg;
int res = 0;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k; // 1 ~ 300,000
priority_queue<pair<int, int>> pq; // 올림차순 - 최대힙
// val, mass
for(int i=0; i<n; i++){
// 무게 m과 가격 v
// 각 보석의 정보 m,v : 0 ~ 1,000,000
cin >> m >> v;
pq.push(make_pair(v, m)); // value -> mass 순
}
priority_queue<int> bag;
for(int i=0; i<k; i++){
// 가방에 담을 수 있는 최대 무게 C : 1 ~ 100,000,000
cin >> bagg;
bag.push(bagg);
}
// 각 가방에 보석 하나씩 배치
for(int i=0; i<k ;i++){
// 무게 비교
while(pq.top().second > bag.top()){
// val은 크나 mass가 커서 쓸 수 없는 경우 -> 삭제
pq.pop();
}
// mass도 범위 이내이고 val도 그 중 최대인 경우
res += pq.top().first;
pq.pop();
}
cout << res;
return 0;
}