Algorithm/DP

BOJ#11048 이동하기

밤이2209 2017. 4. 6. 02:45

BOJ#11048 이동하기


* 문제


* 풀이

풀이는 생략합니다.
dp 초기값만 주의할 것.


* 나의 코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

/**
* BOJ#11048 이동하기
* https://www.acmicpc.net/problem/11048
*/

public class Main {

static int N, M;
static int[] dRow = {0, -1, -1};
static int[] dCol = {-1, -1, 0};
static int[][] map = new int[1001][1001];
static int[][] dp = new int[1001][1001];

static {

for (int i = 0; i < 1001; i++) {

Arrays.fill(dp[i], -1);
}
}

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());

for (int i = 1; i <= N; i++) {

st = new StringTokenizer(br.readLine());
for (int j = 1; j <= M; j++) {

map[i][j] = Integer.parseInt(st.nextToken());
}
}

dp[1][1] = map[1][1];
System.out.println(solve(N, M));

}

static int solve(int row, int col) {

if (row < 1 || col < 1) return 0;

if (dp[row][col] >= 0) return dp[row][col];

for (int i = 0; i < 3; i++) {

int prevRow = row + dRow[i];
int prevCol = col + dCol[i];

dp[row][col] = Math.max(dp[row][col], solve(prevRow, prevCol) + map[row][col]);
}

return dp[row][col];
}
}



'Algorithm > DP' 카테고리의 다른 글

BOJ#9520 NP-Hard  (0) 2017.04.06
BOJ#12101 1, 2, 3 더하기 2  (0) 2017.04.06
BOJ#11058 크리보드  (2) 2017.04.05
BOJ#12969 ABC  (0) 2017.04.05
BOJ#13398 연속합2  (1) 2017.04.04