문제 링크 : https://www.acmicpc.net/problem/13904
문제 설명
과제의 남은 일수와 과제 점수가 주어질때 가장 많은 점수를 얻을수 있는 경우의수 .
알고리즘
1. 점수가 높은순으로 정렬한다
4 |
2 |
4 |
3 |
1 |
6 |
60 |
50 |
40 |
30 |
20 |
5 |
2. 예제를 예로들면 6일 차부터 얻을수있는 최대 점수를 구한다
6일차 - 5점 3일차 - 40점 (2일남은 과제는 3일차때 못얻으므로.)
5일차 - 0점 2일차 - 50점
4일차 - 60점 1일차 - 30점
코드
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 | #include<iostream> #include<vector> #include<algorithm> using namespace std; bool cmp(pair<int,int> a,pair<int,int> b) { return a.first > b.first; } int main() { vector<pair<int, int>> p; int N; cin >> N; int Size = 0; for (int i = 0; i < N; i++) { int a, b; cin >> a >> b; p.push_back(make_pair(b, a)); Size = max(Size, a); } // 내림 차순 정렬 sort(p.begin(), p.end(), cmp); vector<int> ans; for (int i = Size; i >= 1; i--) { for (int j = 0; j < N; j++) { //과제 점수를 얻을 수있으면 얻고 break if (p[j].second >= i) { ans.push_back(p[j].first); p[j] = make_pair(0, 0); break; } } } int sum = 0; for (int i = 0; i < ans.size(); i++) { sum += ans[i]; } cout << sum; } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 2805번: 나무 자르기 (0) | 2020.04.14 |
---|---|
백준 2343번: 기타레슨 (0) | 2020.04.14 |
백준 1629번 : 곱셈 (0) | 2020.04.13 |
백준 1074번 : Z (0) | 2020.04.13 |
백준 12100번 : 2048(easy) (0) | 2020.04.13 |