본문 바로가기

개발/알고리즘

보석

문제


세계적인 도둑 동현이는 보석점을 털기로 결심했다.


동현이가 털 보석점에는 보석이 총 N개 있다. 각 보석은 무게 Mi와 가격 Vi를 가지고 있다. 동현이는 가방을 K개 가지고 있고, 각 가방에 담을 수 있는 최대 무게는 Ci이다. 각 가방에는 최대 한 개의 보석만 넣을 수 있다.


동현이가 훔칠 수 있는 보석의 최대 가격을 구하는 프로그램을 작성하시오.




입력


첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000)


다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (1 ≤ Mi, Vi ≤ 1,000,000)


다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci ≤ 100,000,000)


모든 숫자는 양의 정수이다.




출력


첫째 줄에 동현이가 훔칠 수 있는 보석 가격의 합의 최대값을 출력한다.




힌트


입력 예제


3 2

1 65

5 23

2 99

10

2


출력 예제


164


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <queue>
#include <algorithm>
#include <limits.h>
         
         
//Jewel -------------------
void argueInput();
void Jewel();
//Jewel -------------------
         
         
int main(int argc, char** argv) {
    Jewel();
    return 0;
}
         
struct Node{
    int M;
    int V;
    bool operator < (const Node &node) const{
        return M < node.M;
    }
};
//Jewel -------------------
int N, K;
Node node[300000]; //무게 , 무게
int C[300000]; //가방최대무게
         
         
void argueInput(){
    scanf("%d %d", &N, &K);
    int M, V;
    for(int i=0; i<N; i++){
        scanf("%d %d", &M, &V);
        node[i].M = M;
        node[i].V = V;
    }
    for(int i=0; i<K; i++){
        scanf("%d", &C[i]);
    }
}
      
void Jewel(){
    argueInput();
    std::sort(node, node+N);
    std::sort(C, C+K);
    std::priority_queue<int> jewelQueue;
    long long answer = 0;
    int j = 0;
    for(int i=0; i<K; i++){ 
        while(j<N){
            if(node[j].M > C[i]){
                break;
            }else{
                jewelQueue.push(node[j].V);
                j++;
            }
        }
     
        if(jewelQueue.size() != 0){
            answer += (long long)jewelQueue.top();
            jewelQueue.pop();
        }
    }
          
    printf("%lld",answer);
          
}
//Jewel -------------------




'개발 > 알고리즘' 카테고리의 다른 글

휴게소  (0) 2016.12.03
술 약속  (0) 2016.12.03
풍선  (0) 2016.12.02
지은이가 지은 집  (0) 2016.12.02
가장 많은 수  (0) 2016.12.02