【剑指offer】礼物的最大值 动态规划

迈不过友情╰ 2022-04-11 10:52 257阅读 0赞

题目描述
在这里插入图片描述
采用动态规划的方式:f(x, y) = matrix(x, y) + max[f(x - 1, y), f(x, y - 1)]并且使用另外一个矩阵保存中间结果,防止重复迭代

  1. class Solution:
  2. def RecursionOfValue(self, matrix, maxValueMatrix, row, col):
  3. maxValue = 0
  4. if row == 0 and col == 0:
  5. return matrix[0][0]
  6. if row >= 0 and row < len(matrix) and col >= 0 and col < len(matrix[0]):
  7. if row >= 1 and maxValueMatrix[row - 1][col] != 0:
  8. temp1 = maxValueMatrix[row - 1][col]
  9. else:
  10. temp1 = self.RecursionOfValue(matrix, maxValueMatrix, row - 1, col)
  11. if col >= 1 and maxValueMatrix[row][col - 1] != 0:
  12. temp2 = maxValueMatrix[row][col - 1]
  13. else:
  14. temp2 = self.RecursionOfValue(matrix, maxValueMatrix, row, col - 1)
  15. maxValue += matrix[row][col] + max(temp1, temp2)
  16. maxValueMatrix[row][col] = maxValue
  17. return maxValue
  18. def MaxValueOfGift(self, matrix):
  19. if matrix == []:
  20. return 0
  21. cols = len(matrix[0])
  22. rows = len(matrix)
  23. maxValueMatrix = [([0] * cols) for i in range(rows)]
  24. return self.RecursionOfValue(matrix, maxValueMatrix, rows - 1, cols - 1)
  25. matrix = [[1,10,3,8],[12,2,9,6],[5,7,4,11],[3,7,16,5]]
  26. print(Solution().MaxValueOfGift(matrix))

输出:53

发表评论

表情:
评论列表 (有 0 条评论,257人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Offer47:礼物价值

    在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格直到到达棋盘的右下角。给定一个