1+ '''
2+ BOJ #2169. ๋ก๋ด ์กฐ์ข
ํ๊ธฐ(๊ณจ๋2)
3+ https://www.acmicpc.net/problem/2169
4+ ์ ํ: Dynamic Programming
5+ '''
6+
7+ import sys
8+ input = sys .stdin .readline
9+
10+ # ์
๋ ฅ
11+ N , M = map (int , input ().split ()) # ์ง๋์ ํฌ๊ธฐ
12+ grid = [list (map (int , input ().split ())) for _ in range (N )] # ๊ฐ ์ง์ญ์ ๊ฐ์น
13+
14+ # DP ํ
์ด๋ธ
15+ dp = [[0 ] * M for _ in range (N )]
16+
17+ # ์ฒซ ๋ฒ์งธ ํ ์ด๊ธฐํ (์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋์ ํฉ)
18+ dp [0 ][0 ] = grid [0 ][0 ]
19+ for j in range (1 , M ):
20+ dp [0 ][j ] = dp [0 ][j - 1 ] + grid [0 ][j ] # (0,1)โ(0,2)โ(0,3)..
21+
22+ # ๋ ๋ฒ์งธ ํ๋ถํฐ (์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ, ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์งํ)
23+ for i in range (1 , N ):
24+ left_to_right = [0 ] * M
25+ right_to_left = [0 ] * M
26+
27+ # ์ผ์ชฝ โ ์ค๋ฅธ์ชฝ
28+ left_to_right [0 ] = dp [i - 1 ][0 ] + grid [i ][0 ] # ์ฒซ๋ฒ์งธ ์ด์ ์์ชฝ์์๋ง ์ฌ ์ ์์
29+ for j in range (1 , M ): # ๋๋ฒ์งธ ์ด๋ถํฐ๋ ์์ชฝ, ์ผ์ชฝ์์ ์ค๋ ๊ฒฝ์ฐ ์ค ์ ํ
30+ left_to_right [j ] = max (dp [i - 1 ][j ], left_to_right [j - 1 ]) + grid [i ][j ]
31+
32+ # ์ค๋ฅธ์ชฝ โ ์ผ์ชฝ
33+ right_to_left [M - 1 ] = dp [i - 1 ][M - 1 ] + grid [i ][M - 1 ] # ๋ง์ง๋ง ์ด์ ์์ชฝ์์๋ง ์ฌ ์ ์์
34+ for j in range (M - 2 , - 1 , - 1 ): # ๊ทธ ๋ค์ ์ด๋ถํฐ๋ ์์ชฝ, ์ค๋ฅธ์ชฝ์์ ์ค๋ ๊ฒฝ์ฐ ์ค ์ ํ
35+ right_to_left [j ] = max (dp [i - 1 ][j ], right_to_left [j + 1 ]) + grid [i ][j ]
36+
37+ # ๋ ๊ฐ์ ๋ฐฐ์ด์ ๋น๊ตํด dp[i][j] ๊ฐฑ์
38+ for j in range (M ):
39+ dp [i ][j ] = max (left_to_right [j ], right_to_left [j ])
40+
41+ # ์ ๋ต ์ถ๋ ฅ
42+ print (dp [N - 1 ][M - 1 ]) # ๋ง์ง๋ง ์์น์ ์ ์ฅ๋ ๊ฐ์ด ํ์ฌํ ์ง์ญ ๊ฐ์น ํฉ์ ์ต๋๊ฐ
0 commit comments