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

Python에서 수집할 수 있는 최대 동전 수를 찾는 프로그램

<시간/>

각 셀이 일부 동전을 저장하는 2D 행렬이 있다고 가정합니다. [0,0]에서 시작하여 오른쪽이나 아래쪽으로만 이동할 수 있는 경우 오른쪽 하단 모서리에서 수집할 수 있는 최대 동전 수를 찾아야 합니다.

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

1
4
2
2
0
0
0
5

경로를 선택하면 출력은 14가 됩니다. [1, 4, 2, 2, 5]

이 문제를 해결하기 위해 다음 단계를 따르겠습니다-

  • 범위 1에서 A의 행 수까지 r에 대해 수행

    • A[r, 0] :=A[r, 0] + A[r-1, 0]

  • 범위 1의 c에서 A의 열 수까지 수행하려면

    • A[0, c] :=A[0, c] + A[0, c-1]

    • 범위 1에서 A 크기까지의 r에 대해 다음을 수행하십시오.

    • 범위 1에서 A[0] 크기의 c에 대해

    • A[r, c] =A[r, c] + (A[r-1, c] 및 A[r, c-1]의 최대값

  • A

    오른쪽 하단의 반환 값

더 나은 이해를 위해 다음 구현을 살펴보겠습니다-

class Solution:
   def solve(self, A):
      for r in range(1, len(A)):
         A[r][0] += A[r-1][0]
      for c in range(1, len(A[0])):
         A[0][c] += A[0][c-1]
      for r in range(1, len(A)):
         for c in range(1, len(A[0])):
            A[r][c] += max(A[r-1][c], A[r][c-1])
      return A[-1][-1]
ob = Solution()
matrix = [ [1, 4, 2, 2], [6, 0, 0, 5] ]
print(ob.solve(matrix))

입력

matrix = [
   [1, 4, 2, 2],
   [6, 0, 0, 5]
]

출력

14