티스토리 뷰


DP를 이용하여 해결이 가능하다. 


한행만 선택이 가능하므로 행마다 따로 선택할 수 있는 최대값을 계산하여 그 값을 이용하여 따로 최대값을 계산해 준다. 

하나를 선택하면 다음을 걸러서 선택할 수 있으므로 점화식은 다음과 같다. 


dp[i] = Math.max(dp[i - 2] + dp[i], dp[i - 1])



import java.util.Scanner;
/**
* 백준, 5721, 사탕줍기
*
* @author whitebeard-k
*
*/
public class Problem5721 {
static int M;
static int N;
static int[] nums;
static int[] dp;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
M = sc.nextInt();
N = sc.nextInt();
if (M == 0 && N == 0)
break;
dp = new int[M + 1];
for (int i = 1; i <= M; i++) {
nums = new int[N + 1];
// y축에 대한 선택
for (int j = 1; j <= N; j++) {
nums[j] = sc.nextInt();
if (j >= 2) {
// j-2에 대한 값의 선택과, j-1에 대한 값의 선택중 큰 값을 저장
nums[j] = Math.max(nums[j - 2] + nums[j], nums[j - 1]);
}
}
dp[i] = nums[N];
// x축에 대한 선택
if (i >= 2) {
// y축의 최대값 중 i-2의 값의 선택과 i-1의 값의 선택을 저장
dp[i] = Math.max(dp[i - 2] + dp[i], dp[i - 1]);
}
}
System.out.println(dp[M]);
}
sc.close();
}
}
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1991 트리순회  (0) 2018.01.13
[백준][DP] 1149 RGB 거리  (0) 2017.11.15
[백준] 1504 특정한 최단 경로  (0) 2017.10.25
[백준][DP] 1463 1로 만들기  (0) 2017.10.25
[백준][세그먼트 트리] 1275 커피숍2  (0) 2017.10.25
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
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
글 보관함