문제 링크 : www.acmicpc.net/problem/20115
그리디 알고리즘으로 해결할 수 있는 문제이다.
최종적으로 만든 드링크의 양이 최대가 되기 위해서는, 두 드링크를 섞을 때 버려지는 양이 최소가 되어야 한다.
그러기 위해서는 두 드링크를 섞을 때, 원래 양이 더 적은 드링크를 절반 버리는 것이 이득이다.
따라서, 드링크의 목록 중 가장 양이 많은 드링크가 기준이 되어, 다른 모든 드링크를 절반씩 섞은 양이 최종 드링크의 최대 양이 된다.
[코드]
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
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> p;
int n;
vector<int> vals;
bool compare(int a, int b) {
return a > b;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(NULL);
int value;
double result = 0.0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> value;
vals.push_back(value);
}
sort(vals.begin(), vals.end(), compare);
result = (double)vals[0];
for (int i = 1; i < n; i++) {
result += vals[i] * 0.5;
}
printf("%lf\n", result);
return 0;
}
|
cs |
'알고리즘 > 2020 Goricon 문제풀이' 카테고리의 다른 글
[2020 Goricon] BOJ 20117 호반우 상인의 이상한 품질 계산법 (0) | 2020.12.14 |
---|---|
[2020 Goricon] BOJ 20116 상자의 균형 (0) | 2020.12.14 |
[2020 Goricon] BOJ 20114 미아 노트 (0) | 2020.12.05 |
[2020 Goricon] BOJ 20113 긴급 회의 (0) | 2020.12.05 |
[2020 Goricon] BOJ 20112 사토르 마방진 (0) | 2020.12.05 |