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 |