티스토리 뷰

https://www.acmicpc.net/problem/2156

 

해설

3번째 와인일 때의 경우의 수

  • 3번째 와인을 먹지 않는다. -> 연속하여 3번을 먹을 수 없기 때문이다.
  • 2번째 와인과 3번째 와인을 연속으로 먹는다.
  • 1번째 와인과 3번째 와인을 먹는다.

위의 경우의수를 3번째 와인 이상인 경우에 적용한다.

반대로 i가 3보다 작은경우는 코드를 확인하자.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    static int n;
    static int[] arr;
    static int[] dp;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        n = Integer.parseInt(br.readLine());
        arr = new int[10001];
        dp = new int[10001];

        for (int i = 1; i <= n; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }
        dp[1] = arr[1];
        dp[2] = arr[1] + arr[2];

        System.out.println(recur());
    }

    static int recur() {
        for (int i = 3; i <= n; i++) {
            dp[i] = Math.max(
                // 1-2(현재 와인을 먹지 않는다), 2-3
                Math.max(dp[i - 1], dp[i - 3] + arr[i - 1] + arr[i]),
                //1-3
                dp[i - 2] + arr[i]
            );
        }

        return dp[n];
    }
}
Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
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