반응형
https://www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
dp[] = 포도주를 최대로 마신양
arr[] = 포도주 별 양
세번 연속 마실 수 없다는 규칙이 있을 때 효주가 포도주를 많이 마셔 볼 수 있는 방법은 아래와 같다.
1. 0번 : O , dp[0]= arr[0]
2. 1번 : OO , dp[1]= dp[0]+arr[1]
3. 2번 : OOX / OXO / XOO , dp[2]=Math.max(dp[1],(Math.max(arr[0], arr[1])+arr[2]));
4. 3번~N-1번 : ???X / OOXO / OXOO , dp[3]=Math.max(dp[2],Math.max(dp[1], dp[0]+arr[2])+arr[3]);
import java.util.*;
public class Main {
static int N;
static int[] arr,dp;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
N=sc.nextInt();
arr=new int[N];
dp=new int[N];
for(int i=0;i<N;i++) {
arr[i]=sc.nextInt();
}
dp[0]=arr[0];
for(int i=1; i<N;i++) {
if(i==1) {
dp[1]=dp[0]+arr[1];
}
else if(i==2) {
dp[2]=Math.max(dp[1],(Math.max(arr[0], arr[1])+arr[2]));
}
else {
dp[i]=Math.max(dp[i-1],Math.max(dp[i-2], dp[i-3]+arr[i-1])+arr[i]);
}
}
System.out.println(dp[N-1]);
}// main()
}// class Main
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[Java] 백준 10844 : 쉬운 계단 수 (0) | 2023.02.04 |
---|---|
[Java] 백준 11729 : 하노이 탑 이동 순서 (0) | 2023.02.04 |
[Java] 백준 1932 : 정수 삼각형 (0) | 2023.02.03 |
[Java] 백준 1697 : 숨바꼭질 (0) | 2023.02.02 |
[Java] 백준 1931 : 회의실 배정 (0) | 2023.02.02 |
댓글