https://www.acmicpc.net/problem/14501
import java.io.*;
import java.util.*;
class Main {
static int N;
static Work[] works;
static int result = Integer.MIN_VALUE;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
works = new Work[N];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
works[i] = new Work(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
}
backTracking(0, 0);
System.out.println(result);
}
static void backTracking(int idx, int pay) {
if (idx >= N) {
result = Math.max(result, pay);
return;
}
int updatedDate = works[idx].date + idx;
if (updatedDate <= N) {
backTracking(updatedDate, pay + works[idx].pay);
} else {
backTracking(updatedDate, pay);
}
backTracking(idx + 1, pay);
}
static class Work {
int date;
int pay;
Work(int day, int money) {
this.date = day;
this.pay = money;
}
}
}
works[idx].date + idx
는 그 일을 수행한 후의 Date
가 된다. 예를 들어 works[0]
의 date
가 3이라면, 그 일을 끝낸 후에는 3일째가 되는 것이다.