当前位置: 首页 > news >正文

Leetcode 3257. Maximum Value Sum by Placing Three Rooks II

  • Leetcode 3257. Maximum Value Sum by Placing Three Rooks II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3257. Maximum Value Sum by Placing Three Rooks II

1. 解题思路

这道题同样是题目3256的一个进阶版本,但同样也只是增加了复杂度而已,整体而言两者的解题思路是完全相同的,就是一个遍历+剪枝的思路。

首先,我们将所有元素按照其值的大小从大到小进行排列,然后依次考察每个元素被选入的情况,这个就是一个简单的迭代算法,倒是也没啥复杂的。

但是显然,如果不加上任何额外操作,整体的算法复杂度就会是 O ( n 3 m 3 ) O(n^3m^3) O(n3m3),这显然是不可接受的,因此我们需要进行剪枝,而剪枝逻辑倒也简单,我们优先从大到小进行选取,如果后续连续元素加上之前已选的元素的和已经无法超过当前选到的最大值了,那么后续所有的遍历都没必要再进行了,此时我们就能大幅缩减整体的算法复杂度,使之通过这两道题的全部测试样例。

2. 代码实现

给出python代码实现如下:

class Solution:def maximumValueSum(self, board: List[List[int]]) -> int:n, m = len(board), len(board[0])ans = -math.infcells = [(board[i][j], i, j) for i in range(n) for j in range(m)]cells = sorted(cells, reverse=True)N = n * mdef dfs(idx, selected, pre):nonlocal ansif len(selected) == 3:ans = max(ans, pre)if idx >= N:returnif pre + sum(x[0] for x in cells[idx: idx+3-len(selected)]) <= ans:returnif selected == [] or all(cells[idx][1] != x and cells[idx][2] != y for x, y in selected):dfs(idx+1, selected + [(cells[idx][1], cells[idx][2])], pre + cells[idx][0])dfs(idx+1, selected, pre)returndfs(0, [], 0)return ans

提交代码评测得到:耗时1205ms,占用内存117.7MB。


http://www.mrgr.cn/news/150.html

相关文章:

  • 机器学习/自主系统与亚当·斯密
  • 24/8/14算法笔记 复习_支持向量机svc
  • YOLOv10实时端到端目标检测
  • docker-实战——consul集群
  • 基于x86 平台移植seetaface6
  • Mysql面试一
  • CSS的:placeholder-shown伪类:精确控制输入框占位符样式
  • 贪心算法3
  • ECMAScript性能优化技巧与陷阱
  • 部署flannel网络(master服务器执行)遇到错误
  • 入门网络安全工程师要学习哪些内容
  • 【Hot100】LeetCode—142. 环形链表 II
  • Go环境搭建-开发工具
  • 容器使用私钥远程至宿主机执行命令
  • Unity 求坐标点在扇形区域内的投影
  • 选择Linux发行版:就像选宠物,你准备好了吗?
  • 不同路径 II[中等]
  • Kali Linux 命令大全
  • C/C++ 不定参函数
  • 模拟实现简单栈和队列