[BOJ/백준][Gold4] 2109 : 순회강연 (C++)
https://www.acmicpc.net/problem/2109
2109번: 순회강연
한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠다고 알려왔다.
www.acmicpc.net
[난이도] Gold4
[유형] Greedy
[풀이]
i일에는 d가 i 이상인 강연만 할 수 있다.
앞에서부터 생각하면 복잡하므로 뒤에서부터 가능한 강연료를 우선순위 큐에 추가하면 된다.
10000일이 최대이므로 i를 10000 ~ 1로 순회하면서 d가 i인 강연의 강연료 p를 우선순위 큐에 push하고
1개를 뽑으면 i일에 할 수 있는 최적의 강연을 뽑을 수 있다.
#include <cstdio> #include <vector> #include <queue> using namespace std; int N,ans; vector<int> a[10001]; int main(){ scanf("%d",&N); for(int i=0;i<N;i++){ int p,d; scanf("%d%d",&p,&d); a[d].push_back(p); } priority_queue<int> pq; for(int i=10000;i>0;i--){ for(auto k : a[i]) pq.push(k); if(!pq.empty()){ ans+=pq.top(); pq.pop(); } } printf("%d",ans); }
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/2109.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 2157 : 여행 (C++) (0) | 2020.12.27 |
---|---|
[BOJ/백준][Gold4] 2306 : 유전자 (C++) (0) | 2020.12.27 |
[BOJ/백준][Gold4] 3980 : 선발 명단 (C++) (0) | 2020.12.27 |
[BOJ/백준][Gold4] 2151 : 거울 설치 (C++) (0) | 2020.12.24 |
[BOJ/백준][Gold4] 1027 : 고층 건물 (C++) (0) | 2020.12.24 |