File tree Expand file tree Collapse file tree 1 file changed +38
-0
lines changed
minjeong/DynamicProgramming Expand file tree Collapse file tree 1 file changed +38
-0
lines changed Original file line number Diff line number Diff line change 1+ import sys
2+ input = sys .stdin .readline
3+
4+ # 입력
5+ N , M = map (int , input ().split ())
6+ nums = []
7+ for _ in range (N ):
8+ nums .append (list (map (int , input ().split ())))
9+
10+ dp = [[0 ] * M for _ in range (N )]
11+
12+ # 첫 줄
13+ dp [0 ][0 ] = nums [0 ][0 ]
14+ for j in range (1 , M ):
15+ dp [0 ][j ] = dp [0 ][j - 1 ] + nums [0 ][j ]
16+
17+ # 왼쪽 누적합 업데이트 -> 오른쪽 누적합 업데이트, 이후 둘 중 더 큰 값으로 업데이트
18+ for i in range (1 , N ):
19+
20+ left_prefix_sum = [0 ] * M # 왼쪽 누적합
21+ right_prefix_sum = [0 ] * M # 오른쪽 누적합
22+
23+ # 왼쪽 누적합
24+ left_prefix_sum [0 ] = dp [i - 1 ][0 ] + nums [i ][0 ]
25+ for j in range (1 , M ):
26+ left_prefix_sum [j ] = max (dp [i - 1 ][j ], left_prefix_sum [j - 1 ]) + nums [i ][j ]
27+
28+ # 오른쪽 누적합
29+ right_prefix_sum [M - 1 ] = dp [i - 1 ][M - 1 ] + nums [i ][M - 1 ]
30+ for j in range (M - 2 , - 1 , - 1 ):
31+ right_prefix_sum [j ] = max (dp [i - 1 ][j ], right_prefix_sum [j + 1 ]) + nums [i ][j ]
32+
33+ # DP에 저장
34+ for j in range (M ):
35+ dp [i ][j ] = max (left_prefix_sum [j ], right_prefix_sum [j ])
36+
37+ # 정답 출력
38+ print (dp [N - 1 ][M - 1 ])
You can’t perform that action at this time.
0 commit comments