이코테 금광
업데이트:
금광
다이나믹 프로그래밍 문제로 점화식을 찾으면 쉽게 풀수 있지만 난 답을 봄..
한칸 뒤에서부터 왼쪽 위, 왼쪽, 왼쪽 아래의 값을 한번씩 더해서 가장 큰 값을 갱신한다.
dp[i][j] = dp[i][j] + Max(dp[i-1][j-1], dp[i][j-1], dp[i+1][j-1])
import java.util.Scanner;
public class GoldMine {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i = 0; i < T; i++) {
int n = sc.nextInt();
int m = sc.nextInt();
int[][] location = new int[n][m];
for(int j = 0; j < n; j++ ) {
for(int k = 0; k < m; k++) {
location[j][k] = sc.nextInt();
}
}
int[][] dp = location.clone();
for(int j = 1; j < m; j++ ) {
for(int k = 0; k < n; k++) {
int first = 0;
int third = 0;
if(k-1 > 0) {
first = dp[k-1][j-1];
}
int second = dp[k][j-1];
if(k+1 < n) {
third = dp[k+1][j-1];
}
dp[k][j]=dp[k][j] + Math.max(first, Math.max(second, third));
}
}
int result = 0;
for(int k = 0; k < n; k++) {
result = Math.max(result, dp[k][m-1]);
}
System.out.println(result);
}
}
}
댓글남기기