Algorithm, boj, 쉬운 계단 수(10844)
풀이
- (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동할 수 있다는 점에 주목한다
- 방한칸을 옮길때마다 (dp[i][j]) 해당 방의 위, 왼쪽옆, 왼쪽대각선위의 방 중에 가장 큰값과 해당 방의 값을 더해 최적의 값을 구한다.
package org.baekjoon;
import java.util.Scanner;
public class test11048_moving {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int arr[][] = new int[n+1][m+1];
int dp[][] = new int[n+1][m+1];
int[] nx = {1, 0, 1};
int[] ny = {0, 1, 1};
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
arr[i][j] = sc.nextInt();
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
dp[i][j] = Math.max(dp[i-1][j] , Math.max(dp[i][j-1], dp[i-1][j-1])) + arr[i][j];
}
}
System.out.println(dp[n][m]);
}
}
Reference