Time: 20191006
Type: Medium

题目描述

你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 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。

提示:

1 <= grid.length, grid[i].length <= 15
0 <= grid[i][j] <= 100
最多 25 个单元格中有黄金。

思路

DFS,从可以进入的边界进入探索,用f[i][j]记录到(i, j)位置处的最大值,可以以很多种方式进入到(i, j),只需要记录最大值即可。

代码

class Solution:def getMaximumGold(self, grid: List[List[int]]) -> int:def dfs(i, j, cur_sum):# 递归边界if i < 0 or i > len(grid) - 1 or j < 0 or j > len(grid[0]) - 1 or grid[i][j] == 0 or (i, j) in visited:  return visited.add((i, j))f[i][j] = max(f[i][j], cur_sum)# 向四个方向探索,如果有可能的话if i > 0:dfs(i - 1, j, cur_sum + grid[i-1][j])if j > 0: dfs(i, j - 1, cur_sum + grid[i][j-1])if i < len(grid) - 1:dfs(i + 1, j, cur_sum + grid[i+1][j])if j < len(grid[0]) - 1:dfs(i, j + 1, cur_sum + grid[i][j+1])visited.discard((i, j))f = [[0] * len(grid[0]) for i in range(len(grid))]for i in range(len(grid)):for j in range(len(grid[0])):if grid[i][j] != 0:visited = set()dfs(i, j, grid[i][j])res = 0for row in f:for col in row:res = max(res, col)return res

2019.10 Update:

第一届PAT算法直播课培训班招募帖,欢迎点击查看详情、

END.

Leetcode 1219.黄金矿工相关推荐

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

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

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

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

  3. leetcode每日一题1219. 黄金矿工 DFS深搜 暴力AC 正月初五祝大家财源广进~

  4. 力扣 1219黄金矿工

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

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

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

  6. 黄金矿工游戏demo

    试玩地址:  http://www.adanghome.com/js_demo/13/ 请使用chrome.firefox或safari.ie的话,请大于ie8. 按空格键扔出钩子,按左右键控制矿工移 ...

  7. 2018级C语言大作业 - 黄金矿工

    黄金矿工 C语言作业 分享18级同学大一上学期用C语言实现的黄金矿工.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1xCy1l2-7Q ...

  8. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  9. 你的记忆里有黄金矿工吗?

    黄金矿工是大概是我初中时候玩的游戏吧,记忆中的样子是一群人围在一个电脑傍边,两人一组,输了就换下一组,虽然它不上现在游戏的丰富的游戏内容.但是就是让人欲罢不能,成为一款经典! Java游戏项目黄金矿工 ...

最新文章

  1. 解决异方差问题--加权最小二乘法
  2. 传2020年苹果Mac将用自制芯片
  3. rust go java 性能_Java,Go和Rust之间的比较 - Dexter
  4. android 分区修改工具_Android刷机包制作工具与教程-大神必备
  5. html表格在页面间距,在CSS中设置单元格和单元格间距?
  6. JOptionPane弹框常用实例
  7. Python库:random库
  8. linux外接NetApp存储,netapp linux iscsi 实现
  9. Kelvin云层效果Ps笔刷
  10. 50个新的汉化Demo!纯前端 Wijmo 放大招
  11. 拓端tecdat|R语言对BRFSS数据探索回归数据分析
  12. c++ 调用com组件步骤
  13. Python安装教程_Python运行环境的搭建
  14. STM32单片机初学2-从Keil工程创建开始
  15. 香农公式和奈氏准则描述的是同一个东西吗?
  16. 【附源码】计算机毕业设计JAVA东理咨询交流论坛
  17. 静态方法中调用非静态方法
  18. fre740变频器参数_三菱变频器参数设置教程
  19. matlab quantile_Matlab:空间计量经济学工具箱命令汇总
  20. 思想“一念之间”,读书笔记

热门文章

  1. mysql创建bit类型报错_MySQL入门(三)——MySQL数据类型
  2. python调试方法logging_python中logging使用方法
  3. java开发工作找不到要放弃吗,这样学习Java,才能找到一份Java开发的工作。不要盲目的学!...
  4. python怎么爬取知乎回答并制作词云_使用python爬取流浪地球影评并制作词云,看看别人都说了些说什么...
  5. oracle10gr2安装教程,Solaris10安装Oracle10gR2时的注意事项
  6. 电脑声音太小如何增强_如何录制电脑上播放的声音,背景音乐
  7. servlet3异步 例子_异步Servlet示例
  8. java8foreach_Java forEach – Java 8 forEach
  9. android生命周期_Android活动生命周期– 7个阶段和功能
  10. scala 提取器模式匹配_Scala提取器应用,取消应用和模式匹配