1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
dp 느낌으로 뒤에서부터 시작했다.
끝나는 날이 퇴사 이후라면 이전과 같은 금액이다.
그 외의 경우에는 상담 이전 금액과 지금 금액 + 이후 금액의 합 중 큰 값이 오면 된다.
4. 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String[] split;
int[] T = new int[N+1];
int[] P = new int[N+1];
int[] sum = new int[N+2];
for(int i=1;i<N+1;i++) { //1일부터 시작
split = br.readLine().split(" ");
T[i] = Integer.parseInt(split[0]); //끝나는 날은 i+T[i]
P[i] = Integer.parseInt(split[1]);
}
for(int i=N;i>0;i--) {
if(i+T[i] > N+1) { //기간이 퇴사 후 라면 이전 값 유지
sum[i] = sum[i+1];
}
else {
sum[i] = Math.max(sum[i+1], P[i]+sum[i+T[i]]);
}
}
System.out.println(sum[1]);
}
}
'ALGORITHM' 카테고리의 다른 글
백준 2164 카드2 (Java) (0) | 2023.02.14 |
---|---|
백준 7576 토마토 (Java) (0) | 2023.02.13 |
백준 1244 스위치 켜고 끄기 (Java) (0) | 2023.02.11 |
백준 15650 N과 M (2) (Java) (0) | 2023.02.10 |
백준 15649 N과 M (Java) (0) | 2023.02.09 |