if(i + Ti(lst.get(i)[0])< N) -> 진행해도됨
answer = Math.max(answer, Sum);
import java.util.*;
public class Main {
static int N, Sum, answer;
static List<int[]> lst;
static boolean[] v;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
lst = new ArrayList<int[]>();
for (int i = 0; i < N; i++) {
int t = sc.nextInt();
int p = sc.nextInt();
int[] temp = { t, p };
lst.add(temp);
}
for (int i = 0; i < N; i++) {
v = new boolean[N];
Sum = 0;
BackT(i);
}
System.out.println(answer);
}
public static void BackT(int start) {
answer = Math.max(answer, Sum);
for (int i = start; i < N; i++) {
if (i + lst.get(i)[0] <= N) { // 종료 조건
Sum += lst.get(i)[1];
BackT(i + lst.get(i)[0]);
Sum -= lst.get(i)[1];
}
}
}
}