1월부터 12월까지 모든 달에 대해서 1일권을 사용할지/1달권을 사용할지/3달권을 사용할지/ 1년권을 사용할지를
모두 해보면 되는데 1년권을 사용할 경우에는 한번에 12개월치를 다 정해주는거나 마찬가지이므로 정답에 미리 넣어놓고 다른 경우들과 비교해주면된다.
1일권을 이용하는 경우에는
해당 달의 이용일수X1월권 비용을 전체 비용에 더해준다.
1달권을 이용하는 경우에는
해당 달에 몇번을 이용하든 상관없으므로 1달권의 비용만 더해주면 된다.
3달권을 이용하는 경우에는
마찬가지로 3달권의 비용만 더해주면 되는데 대신에 다음 두달치까지 계산되므로 (현재달 + 3)번째 달로 넘어가서 다시 비용을 계산해주면 된다.
모든 달에 대해서 계산해줬다면 총 비용을 비교하여 최댓값을 저장해주고 리턴한다.
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
|
#include <iostream>
using namespace std;
int price[4];
int plan[13];
int ans;
void solve(int month, int sum) {
if (month > 12) {
if (ans > sum) ans = sum;
return;
}
//이번 달에 수영장을 이용하지 않는 경우
if (plan[month] == 0) {
solve(month + 1, sum);
}
else {
//1일 이용권을 사용하는 경우
solve(month + 1, plan[month] * price[0] + sum);
//1달 이용권을 사용하는 경우
solve(month + 1, price[1] + sum);
//3달 이용권을 사용하는 경우
solve(month + 3, price[2] + sum);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int T;
cin >> T;
for (int tc = 1; tc <= T; tc++) {
for (int i = 0; i < 4; i++) {
cin >> price[i];
}
for (int j = 1; j <= 12; j++) {
cin >> plan[j];
}
ans = price[3];
solve(1, 0);
cout << '#' << tc << ' ' << ans << '\n';
}
return 0;
}
Colored by Color Scripter
|
'SWEA > 모의 SW 역량테스트(C++)' 카테고리의 다른 글
[SWEA] 4014. [모의 SW 역량테스트] 활주로 건설 (0) | 2019.08.06 |
---|---|
[SWEA] 2115. [모의 SW 역량테스트] 벌꿀채취 (0) | 2019.08.05 |
[SWEA] 4013. [모의 SW 역량테스트] 특이한 자석 (0) | 2019.07.11 |
[SWEA] 2105. [모의 SW 역량테스트] 디저트 카페 (0) | 2019.07.11 |
[SWEA] 5658. [모의 SW 역량테스트] 보물상자 비밀번호 (0) | 2019.07.09 |