BOJ 2156: 포도주 시식 https://www.acmicpc.net/problem/2156
1번째
는 1번째 잔을 마신 경우 최대가 된다.2번째
는 1번째와 2번째 잔을 마신 경우 최대가 된다.i 번째
잔을 마실 때의 최대값을 구한다.i번째
와 i-2번째 까지
마신 값i번째
와 i-1번
째, i-3번째 까지
마신 값i번째를 마시지 않은 값
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N + 1];
for (int i = 1; i <= N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
long[] dp = new long[10010];
// 1번째는 1번째 잔을 마신 경우 최대
dp[1] = arr[1];
// 2번째는 1번째와 2번째 잔을 마신 경우 최대 -> 인덱스 에러 안나도록 조건문으로 처리
if (N > 1) {
dp[2] = arr[1] + arr[2];
}
// i 번째의 최대 구하기
for (int i = 3; i <= N; i++) {
dp[i] = Math.max(dp[i-1], Math.max(arr[i] + dp[i - 2], arr[i] + arr[i - 1] + dp[i - 3]));
}
System.out.println(dp[N]);
}
}