你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 0

为了使收益最大化,矿工需要按以下规则来开采黄金:

  • 每当矿工进入一个单元,就会收集该单元格中的所有黄金。
  • 矿工每次可以从当前位置向上下左右四个方向走。
  • 每个单元格只能被开采(进入)一次。
  • 不得开采(进入)黄金数目为 0 的单元格。
  • 矿工可以从网格中 任意一个 有黄金的单元格出发或者是停止。

示例 1:

输入:grid = [[0,6,0],[5,8,7],[0,9,0]]
输出:24
解释:
[[0,6,0],[5,8,7],[0,9,0]]
一种收集最多黄金的路线是:9 -> 8 -> 7。

示例 2:

输入:grid = [[1,0,7],[2,0,6],[3,4,5],[0,3,0],[9,0,20]]
输出:28
解释:
[[1,0,7],[2,0,6],[3,4,5],[0,3,0],[9,0,20]]
一种收集最多黄金的路线是:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。

示例代码:

class Solution:def getMaximumGold(self, grid: List[List[int]]) -> int:m, n = len(grid), len(grid[0])self.step = 0dx = [1, -1, 0, 0]dy = [0, 0, 1, -1]def dfs(x0, y0, s):s += grid[x0][y0]self.step = max(self.step, s)tmp, grid[x0][y0] = grid[x0][y0], 0for k in range(4):x = x0 + dx[k]y = y0 + dy[k]if 0 <= x < m and 0 <= y < n and grid[x][y] != 0:dfs(x, y, s)grid[x0][y0] = tmpfor i in range(m):for j in range(n):if grid[i][j] != 0:dfs(i, j, 0)return self.step

测试代码2:

def get_max_gold_value(grid):m, n = len(grid), len(grid[0])dx = [0, 0, 1, -1]dy = [1, -1, 0, 0]step = 0def dfs(x0, y0, s):nonlocal steps += grid[x0][y0]step = max(step, s)tmp, grid[x0][y0] = grid[x0][y0], 0for i in range(4):x = x0 + dx[i]y = y0 + dy[i]if (0 <= x < m) and (0 <= y < n) and (grid[x][y] != 0):dfs(x, y, s)grid[x0][y0] = tmpfor i in range(m):for j in range(n):if grid[i][j] != 0:dfs(i, j, 0)return stepgrid = [[0, 6, 0], [5, 8, 7], [0, 9, 0]]
result = get_max_gold_value(grid)
print(result)

运行效果:

黄金矿工-收益最大化相关推荐

  1. leetcode1219. 黄金矿工(回溯)

    你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数就表示这一单元格中的黄金数量:如果该单元格是空的,那么就是 0. ...

  2. LeetCode 1219. 黄金矿工(回溯)

    文章目录 1. 题目 2. 回溯DFS解题 1. 题目 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数就表示这一 ...

  3. Leetcode 1219.黄金矿工

    Time: 20191006 Type: Medium 题目描述 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数 ...

  4. LeetCode1219 黄金矿工

    题目描述: 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数就表示这一单元格中的黄金数量:如果该单元格是空的,那么 ...

  5. LeetCode:1219.黄金矿工(Java语言)

    不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 1219.黄金矿工 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 ...

  6. 【回溯】leetcode1219.黄金矿工

    题目: 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数就表示这一单元格中的黄金数量:如果该单元格是空的,那么就是 ...

  7. 黄金矿工--回溯算法

    LeetCode 1219 黄金矿工 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数就表示这一单元格中的黄金数量 ...

  8. 力扣 1219黄金矿工

    题目 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数就表示这一单元格中的黄金数量:如果该单元格是空的,那么就是 ...

  9. Leetcode 1219:黄金矿工(超详细的解法!!!)

    你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数就表示这一单元格中的黄金数量:如果该单元格是空的,那么就是 0. ...

最新文章

  1. ok6410 3.0.1内核调用V4L接口出错解决方法(转)
  2. [py]django url 参数/reverse和HttpResponseRedirect
  3. 笔记-项目配置管理-创建基线或发行基线的主要步骤
  4. 4-3-串的块链存储结构-串-第4章-《数据结构》课本源码-严蔚敏吴伟民版
  5. C语言:一个五位数,判断其是否为回文数
  6. KRPANO资源分析工具下载720THINK全景图
  7. spring boot 2使用Mybatis多表关联查询
  8. 联通沃商店游戏中心接入规范(2014新版)
  9. java解惑--谜题11:最后的笑声
  10. 单片机c语言设计奥运五环,用C语言程序来设计奥运五环图案
  11. matlab语法 axis on,matlab axis
  12. CSS:纯CSS3全屏背景图片幻灯片轮播
  13. 使用python制作爬虫_使用Python的urllib和urllib2模块制作爬虫的实例教程
  14. AndroidProjects个人项目归纳
  15. PYNQ入门(2)——启动系统及例程查看
  16. 亚商投顾早餐FM/0905北交所首只指数、两融制度要来了
  17. 【Linux】Linux 中 man 1、man 2 和 man 3 的区别
  18. 软件系统测试方法有哪些?
  19. C语言中 原码、反码、补码 以及 取反(单目操作符 ~ )
  20. Python删除中文标点符号的方法

热门文章

  1. ​《头号玩家》中的“绿洲”,用 VR 可以找到
  2. AI开源评测基准AI-Rank,为开源建立标准
  3. 六年磨一剑,全时发布音视频会议平台TANG,多款新品亮相
  4. 【机器学习】机器学习算法优缺点对比(汇总篇)
  5. 李彦宏AI布局又下一城,成立生命科学公司“百图生科”
  6. 从零开始构建:使用CNN和TensorFlow进行人脸特征检测
  7. 如何学习SVM?怎么改进实现SVM算法程序?答案来了
  8. 10万人的1000万张图像,微软悄然删除最大公开人脸数据集
  9. 10行代码爬取全国所有A股/港股/新三板上市公司信息
  10. 英伟达发布史上最强GPU,却叫停了自动驾驶车路测