3148. 矩阵中的最大得分

Powered by:NEFU AB-IN

Link

文章目录

3148. 矩阵中的最大得分

题意

给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻)。从值为 c1 的单元格移动到值为 c2 的单元格的得分为 c2 - c1 。

你可以从 任一 单元格开始,并且必须至少移动一次。

返回你能得到的 最大 总得分。

思路

https://leetcode.cn/problems/maximum-difference-score-in-a-grid/solutions/2774823/nao-jin-ji-zhuan-wan-dppythonjavacgo-by-swux7/

  1. dfs
    因为1->2->3和1->3是相同的,那么在dfs的时候只需要dfs下右两个点即可,代码略
  2. 二维前缀
    思路就是只和终点起点有关,与路径无关,那对于每个终点,找到并维护二维前缀的最小值即可

代码

python 复制代码
# 3.8.19 import
import random
from collections import Counter, defaultdict, deque
from datetime import datetime, timedelta
from functools import lru_cache, reduce
from heapq import heapify, heappop, heappush, nlargest, nsmallest
from itertools import combinations, compress, permutations, starmap, tee
from math import ceil, comb, fabs, floor, gcd, hypot, log, perm, sqrt
from string import ascii_lowercase, ascii_uppercase
from sys import exit, setrecursionlimit, stdin
from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union

# Constants
TYPE = TypeVar('TYPE')
N = int(2e5 + 10)
M = int(20)
INF = int(1e12)
OFFSET = int(100)
MOD = int(1e9 + 7)

# Set recursion limit
setrecursionlimit(int(2e9))


class Arr:
    array = staticmethod(lambda x=0, size=N: [x() if callable(x) else x for _ in range(size)])
    array2d = staticmethod(lambda x=0, rows=N, cols=M: [Arr.array(x, cols) for _ in range(rows)])
    graph = staticmethod(lambda size=N: [[] for _ in range(size)])


class Math:
    max = staticmethod(lambda a, b: a if a > b else b)
    min = staticmethod(lambda a, b: a if a < b else b)


class IO:
    input = staticmethod(lambda: stdin.readline().rstrip("\r\n"))
    read = staticmethod(lambda: map(int, IO.input().split()))
    read_list = staticmethod(lambda: list(IO.read()))


class Std:
    class Graph:
        def __init__(self, n: int):
            self.n = n
            self.g = Arr.graph(n)

        def add_edge(self, u: int, v: int, w: int):
            """Add an edge to the graph."""
            self.g[u].append((v, w))

# --------------------------------------------------------------- Division line ------------------------------------------------------------------


class Solution:
    def maxScore(self, grid: List[List[int]]) -> int:
        m, n = len(grid), len(grid[0])
        dp = Arr.array2d(INF, m + 1, n + 1)
        ans = -INF

        for i, row in enumerate(grid):
            for j, x in enumerate(row):
                mn = Math.min(dp[i + 1][j], dp[i][j + 1])
                ans = Math.max(ans, x - mn)
                dp[i + 1][j + 1] = Math.min(mn, x)
        return ans


Solution().maxScore([[9, 5, 7, 3], [8, 9, 6, 1], [6, 7, 14, 3], [2, 5, 3, 1]])
相关推荐
爱喝纯牛奶的柠檬9 小时前
基于STM32的4*4矩阵软键盘驱动
stm32·嵌入式硬件·矩阵
Frostnova丶9 小时前
LeetCode 48 & 1886.矩阵旋转与判断
算法·leetcode·矩阵
阿Y加油吧13 小时前
力扣打卡——搜索二维矩阵、相交链表
线性代数·leetcode·矩阵
qq_2837200514 小时前
WebGL基础教程(十四):投影矩阵深度解析——正交 vs 透视,从公式推导到实战
线性代数·矩阵·webgl·正交·投影
We་ct15 小时前
LeetCode 74. 搜索二维矩阵:两种高效解题思路
前端·算法·leetcode·矩阵·typescript·二分查找
Tisfy17 小时前
LeetCode 1886.判断矩阵经轮转后是否一致:模拟
算法·leetcode·矩阵·题解·模拟
Zaly.1 天前
【Python刷题】LeetCode 1727 重新排列后的最大子矩阵
算法·leetcode·矩阵
2301_766558652 天前
本地部署+云端优化:矩阵跃动龙虾机器人,实现7×24小时AI获客无人值守
人工智能·矩阵·机器人
Tisfy2 天前
LeetCode 3643.垂直翻转子矩阵:原地修改
算法·leetcode·矩阵·模拟
wyiyiyi2 天前
【线性代数】对偶空间与矩阵转置及矩阵分解(Java讲解)
java·线性代数·支持向量机·矩阵·数据分析