ν¬λμ£Όκ° λ¬Έμ μ λμμλ μμ μ²λΌ μλ€κ³ κ°μ ν΄λ³΄μ.
Dp[n]μ ν΄λΉ nλ²μ§Έ κΉμ§, ν¬λμ£Όλ₯Ό μ΅λλ‘ λ§μ λμ κΈ°λ‘ν κ²μ΄λ€.
Dp[1] μ λΉμ°νκ²λ wine[1]μ΄λ€. 1μ λ°μ μμΌλ, 1μμ λ§μ κ² μ΅λκ°μ΄ λλ€.
Dp[2] μμ λΉμ°νκ² wine[1]+wine[2] κ° λλ€. μ°μμΌλ‘ 3μμ λ§μλ건 μλμ§λ§, 2μμ λ§μλ 건 νμ©μ΄ λλ€.
κ·Έλ λ€λ©΄ Dp[3]μ μ΄λ»κ² μ±μΈκΉ
3κ°μ§ Caseκ° μμ μ μλ€.
Case.1
μ΄λ―Έ 1λ²μ§Έ μκ³Ό 2λ²μ§Έ μμ λ§μ κ²½μ° 3λ²μ§Έ μμ λ§μ€ μ μκ³ Dp[3]μ λ λ§μ μμΈμ΄ μμΌλ,
λ³νμμ΄ wine[1] +wine[2] = 16μ΄ λ κ²μ΄λ€.
Case.2
1λ²μ§Έ μκ³Ό 3λ²μ§Έ μμ λ§μ€ κ²½μ°, Dp[3]μ wine[1] + wine[3] = 19κ° λ κ²μ΄λ€.
Case.3
2λ²μ§Έ μκ³Ό 3λ²μ§Έ μμ λ§μ€ κ²½μ°, Dp[3]μ wine[3] + wine[2] =23 κ° λ κ²μ΄λ€.
μ΄ 3κ°μ§ μΌμ΄μ€ μ€, κ°μ₯ κ°μ΄ ν° Caseλ Case 3λ²μΌλ‘, Dp[3]μ 23μΌλ‘ μ λ ₯ν΄μΌ ν κ²μ΄λ€.
Dp[4]λ₯Ό μ±μ°λ κ³Όμ μμ ν¨ν΄μ΄ λͺ νν λ³΄μΌ κ²μ΄λ€.
μμ 3κ°μ§ Case κ° μ‘΄μ¬νλ€.
Case. 1
wine[2]μ wine[3]μ΄ μ νλ κ²½μ° wine[4]λ λ§μ€ μ μμΌλ―λ‘, Dp[4]λ λ³ν μμ΄, Dp[3]μ΄ λ κ²μ΄λ€.
μ¦ Dp[n] = Dp[n-1] μ΄ λλ κ²½μ°μ μκ° νλ μκΈ΄λ€.
Case. 2
wine[2]μ wine[4]λ₯Ό μ νν κ²½μ°, Dp[4] = Dp[2]+ wine[4]κ° λλ€. Dp[2]μΈ μ΄μ λ, 건λμ λ§μ ¨λ , μ°λ¬μ λ§μ ¨λ , wine[4]λ₯Ό μ ννλλ° μ§μ₯μ μ£Όμ§ μκΈ° λλ¬Έμ΄λ€.
μ¦, Dp[n] = Dp[n-2] +wine[n] μ΄ λλ κ²½μ°μ μκ° νλ μκΈ΄λ€.
Case. 3
wine[3]κ³Ό wine[4]λ₯Ό μ νν κ²½μ°, Dp[4] = Dp[1] +wine[4]+wine[3]μ΄ λλ€. 2λ²μ§Έ μμ λ§μμ§ μμμΌλ, 2λ²μ§Έ μμ΄ ν¬ν¨λμ§ μμ Dp[1]κΉμ§μ κ°μ λν΄μ€λ€.
μ¦, Dp[n] = Dp[n-3] + wine[n] + wine[n-1] μ΄ λλ κ²½μ°μ μκ° μκΈ΄λ€.
μ¦, Dp[n]μ Dp[n-1] μ Dp[n-2] +wine[n] μ Dp[n-3] + wine[n] + wine[n-1] μ€ μ΅λκ°μ μ ννλ©΄ λλ€.
μ¬μ€, Dp[3]μ μ±μΈλμλ μ μμ μ μ©ν μ μμλ€.
μ μ νμμ λ°νμΌλ‘ μ½λλ₯Ό μμ±νλ©΄ λλ€!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
long [] wine = new long[n+2];
long [] Dp = new long[n+2];
// wine λ°°μ΄κ³Ό Dp λ°°μ΄ μμ±, μ΄κΈ°κ°μ 2κΉμ§ μ±μμ£ΌκΈ° μν΄
for(int i=1;i<=n;i++) {
wine[i]=scanner.nextInt(); //wine λ°°μ΄ λ°μ΄ν° μ±μ°κΈ°
}
Dp[1]=wine[1];
Dp[2]=wine[1] + wine[2]; // μ κ°―μ 2 μ΄μμΌλ μ΄κΈ°κ°
for(int i = 3;i<=n;i++) {
Dp[i]=Math.max(Dp[i-1], Dp[i-2]+wine[i]);
Dp[i]=Math.max(Dp[i], Dp[i-3]+wine[i]+wine[i-1]);
//3κ°μ§ Case μ€ μ΅λκ°μ μ μ₯
}
System.out.println(Dp[n]);
}
}