用 Python 编写程序,找出消失硬币矩阵中可以得到的最大硬币数量

pythonserver side programmingprogramming更新于 2026/1/11 13:00:17

假设我们有一个 2D 矩阵,其中每个单元格 matrix[r, c] 代表该单元格中存在的硬币数量。当我们从 matrix[r, c] 中拾取硬币时,行 (r - 1) 和 (r + 1) 上的所有硬币都会消失,以及两个单元格 matrix[r, c + 1] 和 matrix[r, c - 1] 上的硬币也会消失。我们必须找到可以收集的最大硬币数量。

因此,如果输入如下

2876
101042
5923

那么输出将是 26,因为我们可以挑选硬币为 8、6、9 和 3 的单元格,所以总数为 26。

为了解决这个问题,我们将遵循以下步骤 −

  • 定义一个函数 getmax() 。这将需要 arr
  • 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 的最大值
  • 返回 res
  • 从主方法执行以下操作 −
  • 如果矩阵为空,则
    • 返回 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

相关文章


有用资源