Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 사라지는 코인 매트릭스에서 얻을 수 있는 최대 코인을 찾는 프로그램

<시간/>

각 셀 행렬[r, c]이 해당 셀에 있는 동전의 수를 나타내는 2D 행렬이 있다고 가정합니다. 행렬[r, c]에서 동전을 집어들면 행 (r - 1)과 (r + 1)의 모든 동전과 두 셀 행렬[r, c + 1]에 있는 동전이 사라집니다. 행렬[r, c - 1]. 모을 수 있는 최대 코인 수를 찾아야 합니다.

따라서 입력이 다음과 같으면

2 8 7 6
10 10 4 2
5 9 2 3

그러면 동전 8, 6, 9와 3이 있는 셀을 선택할 수 있으므로 출력은 26이므로 총합은 26이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • getmax() 함수를 정의합니다. 시간이 걸립니다
  • prev_max :=0
  • curr_max :=0
  • res :=0
  • arr의 각 숫자에 대해 다음을 수행합니다.
    • temp :=curr_max
    • curr_max :=num + prev_max
    • prev_max :=temp 및 prev_max의 최대값
    • res :=res 및 curr_max의 최대값
  • 반환 결과
  • 메인 방법에서 다음을 수행하십시오 -
  • 행렬이 비어 있으면
    • 0을 반환
  • m :=행렬의 행 수
  • n :=행렬의 열 개수
  • row_sum :=크기가 m이고 0으로 채워진 배열
  • 0 ~ m - 1 범위의 i에 대해
    • row_sum[i] :=getmax(matrix[i])
  • getmax(row_sum) 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def getmax(arr):
   prev_max, curr_max = 0, 0
   res = 0
   for num in arr:
      temp = curr_max
      curr_max = num + prev_max
      prev_max = max(temp, prev_max)
      res = max(res, curr_max)
   return res

def solve(matrix):
   if not matrix:
      return 0
   m, n = len(matrix), len(matrix[0])
   row_sum = [0 for _ in range(m)]
   for i in range(m):
      row_sum[i] = getmax(matrix[i])
   return getmax(row_sum)

matrix = [
   [2, 8, 7, 6],
   [10, 10, 4, 2],
   [5, 9, 2, 3]
]
print(solve(matrix))

입력

[
[2, 8, 7, 6],
[10, 10, 4, 2],
[5, 9, 2, 3]
]

출력

26