본문 바로가기
코딩 테스트/다이나믹 프로그래밍

금광

by hazel_ 2021. 2. 22.

p. 375

 

test_case=int(input())
tc_result=[]

for _ in range(test_case):
  n,m=map(int, input().split())
  array=list(map(int, input().split()))

  d=[]
  index=0
  for i in range(n):
    d.append(array[index:index+m])
    index += m
  
  for j in range(1, m):
    for i in range(n):
      # 왼쪽 위에서 오는 경우
        if i==0:
          left_up=0
        else:
          left_up=d[i-1][j-1]
      
      # 왼쪽에서 오는 경우
        left=d[i][j-1]

      # 왼쪽 아래에서 오는 경우
        if i==n-1:
          left_down=0
        else:
          left_down=d[i+1][j-1]

      # 큰것 찾기
        d[i][j]=d[i][j]+max(left, left_up, left_down)
  
  result=0
  for i in range(n):
    result=max(result, d[i][m-1])

  tc_result.append(result)

for i in tc_result:
  print(i)

'코딩 테스트 > 다이나믹 프로그래밍' 카테고리의 다른 글

퇴사  (0) 2021.02.22
정수 삼각형  (0) 2021.02.22
효율적인 화폐 구성  (0) 2021.02.21
바닥 공사  (0) 2021.02.21
개미 전사  (0) 2021.02.21

댓글