<14501> 퇴사

문제 : https://www.acmicpc.net/problem/14501

N의 범위가 최대 15로, 작은 경우에 속해서 완전 탐색을 했습니다. 상담을 하는 경우와 하지 않는 경우를 나누어 해결합니다.
상담이 필요한 기간에 당일 부터 포함되는 것만 주의하여 범위를 계산하면 될 것 같습니다

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
#include <iostream>
#include <algorithm>

#define MAX_SIZE 16

using namespace std;

int day[MAX_SIZE];
int pay[MAX_SIZE];
int n;

int sum = 0;

void go(int d, int s) {
if (d == n + 1) {
sum = max(sum, s);
return;
}

if (d + day[d] <= n + 1) {
go(d + day[d], s + pay[d]);
}
if (d + 1 <= n + 1) {
go(d + 1, s);
}
}

int main(void) {
cin >> n;

for (int i = 1; i <= n; i++) {
cin >> day[i] >> pay[i];
}

go(1, 0);

cout << sum << '\n';

return 0;
}
Author

KimJongMin

Posted on

2017-09-29

Updated on

2021-03-22

Licensed under

댓글