Skip to content

Commit d72a9be

Browse files
authored
Merge pull request #1301 from AlgorithmWithGod/Ukj0ng
[20251103] BOJ / G2 / 로봇 조종하기 / 한종욱
2 parents 23e5fa2 + cac97e5 commit d72a9be

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
```
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
private static int[][] map;
9+
private static int[][][] dp;
10+
private static int N, M;
11+
12+
public static void main(String[] args) throws IOException {
13+
init();
14+
DP();
15+
16+
bw.write(Math.max(dp[N][M][0], Math.max(dp[N][M][1], dp[N][M][2])) + "\n");
17+
bw.flush();
18+
bw.close();
19+
br.close();
20+
}
21+
22+
private static void init() throws IOException {
23+
StringTokenizer st = new StringTokenizer(br.readLine());
24+
N = Integer.parseInt(st.nextToken());
25+
M = Integer.parseInt(st.nextToken());
26+
27+
map = new int[N+1][M+1];
28+
dp = new int[N+1][M+1][3];
29+
30+
for (int i = 0; i <= N; i++) {
31+
for (int j = 0; j <= M; j++) {
32+
Arrays.fill(dp[i][j], Integer.MIN_VALUE / 2);
33+
}
34+
}
35+
36+
for (int i = 1; i <= N; i++) {
37+
st = new StringTokenizer(br.readLine());
38+
for (int j = 1; j <= M; j++) {
39+
map[i][j] = Integer.parseInt(st.nextToken());
40+
}
41+
}
42+
43+
dp[1][1][0] = map[1][1];
44+
dp[1][1][1] = map[1][1];
45+
dp[1][1][2] = map[1][1];
46+
}
47+
48+
private static void DP() {
49+
for (int i = 2; i <= M; i++) {
50+
dp[1][i][1] = dp[1][i-1][1] + map[1][i];
51+
}
52+
53+
for (int i = 2; i <= N; i++) {
54+
for (int j = 1; j <= M; j++) {
55+
dp[i][j][0] = Math.max(dp[i-1][j][0], Math.max(dp[i-1][j][1], dp[i-1][j][2])) + map[i][j];
56+
}
57+
58+
dp[i][1][1] = dp[i][1][0];
59+
for (int j = 2; j <= M; j++) {
60+
dp[i][j][1] = Math.max(dp[i][j][0], dp[i][j-1][1] + map[i][j]);
61+
}
62+
63+
dp[i][M][2] = dp[i][M][0];
64+
for (int j = M-1; j >= 1; j--) {
65+
dp[i][j][2] = Math.max(dp[i][j][0], dp[i][j+1][2] + map[i][j]);
66+
}
67+
}
68+
}
69+
}
70+
```

0 commit comments

Comments
 (0)