leetcode[1219]黄金矿工 python3实现(dfs,回溯)

news/2024/7/20 21:07:32 标签: 深度优先, leetcode, 算法
# 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 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 个单元格中有黄金。 
#  
#  Related Topics 数组 回溯 矩阵 👍 118 👎 0


# leetcode submit region begin(Prohibit modification and deletion)
class Solution:
    def getMaximumGold(self, grid: List[List[int]]) -> int:
        m = len(grid)
        n = len(grid[0])
        max_gold = 0

        def dfs(i, j, gold):
            nonlocal max_gold
            gold += grid[i][j]
            rec = grid[i][j]
            grid[i][j] = 0
            max_gold = max(max_gold, gold)
            for ni, nj in ((i-1,j), (i+1,j), (i,j-1), (i,j+1)):
                if 0<=ni<m and 0<=nj<n and grid[ni][nj]>0:
                    dfs(ni, nj, gold)
            grid[i][j] = rec #回溯,把挖过的坑补上,还原现场
            return
        for i in range(m):
            for j in range(n):
                if grid[i][j] > 0:
                    dfs(i, j, 0)
        return max_gold
# leetcode submit region end(Prohibit modification and deletion)


http://www.niftyadmin.cn/n/905416.html

相关文章

leetcode[1748]唯一元素的和 python3实现(一次遍历,两个集合)

# 给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。 # # 请你返回 nums 中唯一元素的 和 。 # # # # 示例 1&#xff1a; # # 输入&#xff1a;nums [1,2,3,2] # 输出&#xff1a;4 # 解释&#xff1a;唯一元素为 [1,3] &#xff0c;和为 4…

Machine Learning - Coursera 吴恩达机器学习教程 Week5 学习笔记

神经网络的代价函数 定义 L 神经网络总层数 sl 第l层的单元数&#xff08;不包含bias unit&#xff09; K output units/classes的数量 普通逻辑回归代价函数&#xff1a; 神经网络代价函数&#xff1a; 后面的正则化部分&#xff0c;θ矩阵的&#xff1a; 列数当前…

Python之Mail编程

# Mail编程- 管理程序 - Euroda使邮件普及 - Netscape&#xff0c;outlook&#xff0c;forxmail后来居上 - Hotmail使用浏览器发送邮件## 邮件工作流程- MUA邮件用户代理- MTA邮件代理传输- MDA邮件投递代理 -编写程序 - 发送:MUA->MTA with SMTP: simpl…

leetcode[1405]最长快乐字符串 python3实现(贪心法,字典排序)

# 如果字符串中不含有任何 aaa&#xff0c;bbb 或 ccc 这样的字符串作为子串&#xff0c;那么该字符串就是一个「快乐字符串」。 # # 给你三个整数 a&#xff0c;b &#xff0c;c&#xff0c;请你返回 任意一个 满足下列全部条件的字符串 s&#xff1a; # # # s 是一个…

Alpha(8/10)

鐵鍋燉腯鱻 项目&#xff1a;小鱼记账 团队成员项目燃尽图冲刺情况描述站立式会议照片各成员情况团队成员 学号姓名git地址博客地址031602240许郁杨 &#xff08;组长&#xff09;https://github.com/EventideXhttp://www.cnblogs.com/S031602240/181600333杨心逸https://githu…

Machine Learning - Coursera 吴恩达机器学习教程 Week6 学习笔记(Advice for Applying Machine Learning)

评估假设函数 如果发现训练出的模型结果不好&#xff0c;一般会从以下方面找问题&#xff1a; 扩充训练集减少特征集使用额外的特征使用多项式特征增减λ 测试集 为了评估假设函数&#xff0c;一般会将数据集分为两部分&#xff1a;70%的训练集和30%的测试集。 用训练集获…

WEB_web2

题目传送门&#xff1a;http://123.206.87.240:8002/web2/ 题解&#xff1a; 1.查看网页源代码(F12) 2.找到html代码 即可找到flag隐藏在注释钟&#xff1a;<!--flag KEY{Web-2-bugKssNNikls9100}--> 即答案为&#xff1a;KEY{Web-2-bugKssNNikls9100} 转载于:https://ww…

面向对象-类中的三个装饰器

为了代码更加完善,引入几个装饰器.. 装饰类中的方法 classmethod --->装饰类方法,不用self属性,只用类的cls属性 staticmethod --->装饰静态方法,既不用self属性,又不用类cls的属性 property --->把一个方法伪装属性 下面具体说说他们的用法: 1.cla…