来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-with-maximum-gold

题目描述

你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 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方法来做,枚举每一个格子分别作为起点,然后dfs获取以这个格子为起点的最大收益。

代码展示

class Solution {
public: int myCount(vector<vector<int>>& grid, int i, int j)
{
if(i < 0 || j < 0 || i >= grid.size() || j >= grid[0].size())
return 0;
if(grid[i][j] == 0) return 0;
int iMax = grid[i][j];
int iCur = grid[i][j];
grid[i][j] = 0;
iMax = max(iMax, iCur + myCount(grid, i + 1, j));
iMax = max(iMax, iCur + myCount(grid, i - 1, j));
iMax = max(iMax, iCur + myCount(grid, i, j + 1));
iMax = max(iMax, iCur + myCount(grid, i, j - 1));
grid[i][j] = iCur;
return iMax;
} int getMaximumGold(vector<vector<int>>& grid) {
int iMax = 0;
for(int i = 0; i < grid.size(); i++)
for(int j = 0; j < grid[0].size(); j++)
{
int iCount = myCount(grid, i, j);
if(iMax < iCount)
{
iMax = iCount;
}
}
return iMax;
}
};

运行结果

LeetCode-1219 黄金矿工的更多相关文章

  1. LeetCode 5215. 黄金矿工(Java)DFS

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

  2. [Tyvj Aug11] 黄金矿工

    传送门 Description 黄金矿工是一个经典的小游戏,它可以锻炼人的反应能力.该游戏中,可以通过“挖矿”获得积分并不断升级.玩家可以在线玩flash版黄金矿工,也可以下载后玩单机版黄金矿工.目前 ...

  3. 洛谷3961 [TJOI2013]黄金矿工

    题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...

  4. 黄金矿工(LeetCode Medium难度)1129题 题解(DFS)

    题目描述: 给定一个二维网络,给定任意起点与终点.每一步可以往4个方向走.要找出黄金最多的一条线路. 很明显的是要“一条路走到黑,一直下去直到某个条件停止”. 运用dfs(深度优先搜索)求解. 因为起 ...

  5. [loj574]黄金矿工

    记$dep_{x}$为1到$x$的边权和,当$x$上的矿工挖了$y$上的黄金时($y$在$x$子树内),显然$\sum_{e}c_{e}=dep_{y}-dep_{x}$ 由此,对于$u$上权值为$v ...

  6. LeetCode 1219. Path with Maximum Gold

    原题链接在这里:https://leetcode.com/problems/path-with-maximum-gold/ 题目: In a gold mine grid of size m * n, ...

  7. 洛咕 P3961 [TJOI2013]黄金矿工

    甚至都不是树形背包= = 把每条线抠出来,这一条线就是个链的依赖关系,随便背包一下 // luogu-judger-enable-o2 #include<bits/stdc++.h> #d ...

  8. leetcode-157周赛-5215黄金矿工

    题目描述: 方法一:dfs class Solution: def getMaximumGold(self, grid: List[List[int]]) -> int: maxx = 0 R, ...

  9. dfs算法总结

    DFS 深度优先搜索 主要有两种实现方法:栈和递归 什么是DFS?说白了就是一直遍历元素的方式而已,我们可以把它看成是一条小蛇,在每个分叉路口随意选择一条路线走,直到撞到南墙,才会调头返回到上一个分叉 ...

  10. 收藏的几个经典Flash

    本人收藏了几个有意思的Flash,在此与大家分享下 1.黄金矿工中文版.swf 2.中国象棋.swf 3.运动的老鼠.swf 4.时钟.swf 5. 2048.swf 6.小猫逃跑.swf

随机推荐

  1. python模块的含义

    目录 模块简介 模块的本质 python模块的历史 python模块的表现形式 模块的分类 导入模块的两种句式 强调 import句式 import流程推导 练习 from...import...句式 ...

  2. 深入理解Whitelabel Error Page底层源码

    深入理解Whitelabel Error Page底层源码 (一)服务器请求处理错误则转发请求url StandardHostValve的invoke()方法将根据请求的url选择正确的Context ...

  3. adb devices出现offline解决方法

    出现offline或者error: more than one device/emulator问题: 解决方法: 输入命令: adb kill-server adb start-server adb ...

  4. 在nodejs中体验http/2

    前言 2015年,HTTP/2 发布,直到2021年公司的项目才开始在实践中应用:自己对http2诸多特点的理解只存在于字面上,于是尝试在nodejs中实践一下,加深自己的理解. 多路复用 同域名下所 ...

  5. 浅谈promise对象

    背景: 最近项目在做小程序的开发,涉及设计一个统一的登录公共方法,当实现时涉及到多个异步请求,那么问题来了,如何让多个异步请求先后同步进行呢?很多人会想到使用多层嵌套套来实现,就像这样: functi ...

  6. kafka详解(01) - 概述

    kafka详解(01) - 概述 定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域. 消息队列 MQ传统应用场景之异步处理 使用消 ...

  7. 算法学习笔记(9): 中国剩余定理(CRT)以及其扩展(EXCRT)

    扩展中国剩余定理 讲解扩展之前,我们先叙述一下普通的中国剩余定理 中国剩余定理 中国剩余定理通过一种非常精巧的构造求出了一个可行解 但是毕竟是构造,所以相对较复杂 \[\begin{cases} x ...

  8. 华为运动健康服务Health Kit 6.9.0版本新增功能揭秘!

    华为运动健康服务(HUAWEI Health Kit)6.9.0版本新鲜出炉啦! 一文了解新增功能,快来一起加入Health Kit生态大家庭! 一.更丰富:睡眠呼吸记录健康数据开放 呼吸机是用于为患 ...

  9. 万字详解,吃透 MongoDB!

    本文已经收录进 JavaGuide(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识.) 少部分内容参考了 MongoDB 官方文档的描述,在此说明一下. MongoDB ...

  10. 【学习笔记】QT从入门到实战完整版(Lambda)(2)

    Lambda Lambda 表达式很有意思,相信很多人初次见到 Lambda 表达式都会不能理解有什么用,我也一样,看了视频教程之后,突然意识到,Lambda 真的是太好用了,它可以在某些情况下可以很 ...