https://www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
문제
풀이
조건이 있는 DP 문제이다.
특정 i 번째 포도주를 골랐다는 가정을 하면 두 가지 경우로 나뉜다.
i-1 번째를 선택한 경우 => dp[i] =dp[i-3]+arr[i-1]+arr[i]
i-1 번째를 선택하지 않은 경우 => dp[i] = dp[i-2] + arr[i]
그리고 누적합이 그 전 단계가 더 클 경우도 있기때문에 dp[i] 와 dp[i-1] 중 큰 것을 골라야한다.
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
|
import java.util.*;
import java.io.*;
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];
int[] dp = new int[n+1];
for(int i=1;i<=n;i++) {
arr[i] = Integer.parseInt(br.readLine());
}
dp[1]=arr[1];
if(n>1)
dp[2] = arr[1]+arr[2];
for(int i=3;i<=n;i++){
dp[i] = Math.max(dp[i-1],Math.max(dp[i-3]+arr[i-1]+arr[i],dp[i-2]+arr[i]));
}
System.out.println(dp[n]);
}
}
|
cs |
'알고리즘,PS > 백준' 카테고리의 다른 글
[BOJ] 백준 [1149] RGB거리 JAVA (0) | 2021.09.16 |
---|---|
[BOJ] 백준 [2579] 계단 오르기 JAVA (0) | 2021.09.16 |
[BOJ] 백준 [1463,12852] 1로 만들기 1,2 JAVA (0) | 2021.09.14 |
[BOJ] 백준 [1946] 신입사원 JAVA (0) | 2021.09.13 |
[BOJ] 백준 [2252] 줄 세우기 JAVA (0) | 2021.09.09 |