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
그리디 알고리즘으로 풀었다. 비용이 큰 순서가 앞에 오고 작은 순서가 뒤로 오도록 정렬한 뒤 적어도 x일에는 끝내야 하니까 x일에서 출발하여 1일까지 하루씩 줄여 나가면서 방문하지 않은 일수를 만나면 그 지점을 방문처리하고 비용을 더해주는 식으로 풀었다.
#include <iostream>
#include <vector>
#include <algorithm>
#define MAX 10001
using namespace std;
bool mat[MAX] = { false, };
vector<pair<int, int>> v;
int n, x, y, cnt = 0;
bool compare(pair<int, int> a, pair<int, int> b) {
return a.first >= b.first;
}
int main() {
cin >> n;
for(int i = 0; i < n; i++) {
cin >> x >> y;
v.push_back(pair<int, int>(x, y));
}
sort(v.begin(), v.end(), compare);
for(int i = 0; i < v.size(); i++) {
for(int j = v[i].second; j >= 1; j--) {
if(mat[j] == false) {
mat[j] = true;
cnt += v[i].first;
break;
}
}
}
cout << cnt;
return 0;
}
'백준' 카테고리의 다른 글
백준1388 - 바닥 장식 (0) | 2020.08.03 |
---|---|
백준2479 - 경로 찾기 (0) | 2020.07.16 |
백준1062 - 가르침 (0) | 2020.07.06 |
백준1089 - 엘리베이터 (0) | 2020.06.14 |
백준18115 - 카드 놓기 (0) | 2020.06.12 |