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]])
相关推荐
德先生&赛先生3 小时前
LeetCode-542. 01 矩阵
算法·leetcode·矩阵
ScilogyHunter1 天前
深入理解3x3矩阵
线性代数·矩阵
云手机掌柜2 天前
亚矩阵云手机:亚马逊第三方店铺多账号安全合规运营的核心技术支撑
安全·智能手机·矩阵·手机
云手机掌柜2 天前
云手机矩阵:重构企业云办公架构的技术路径与实践落地
智能手机·矩阵·重构
彬彬醤2 天前
Mac怎么连接VPS?可以参考这几种方法
大数据·运维·服务器·数据库·线性代数·macos·矩阵
郝学胜-神的一滴3 天前
深度解析游戏引擎中的相机:视图矩阵
程序人生·unity·矩阵·游戏引擎·godot·图形渲染·虚幻
岁忧3 天前
(nice!!!)(LeetCode 每日一题) 1277. 统计全为 1 的正方形子矩阵 (动态规划)
java·c++·算法·leetcode·矩阵·go·动态规划
叶子2024223 天前
open3d-点云函数:变换:旋转,缩放、平移,齐次变换(R,T)等
线性代数·矩阵
快去睡觉~4 天前
力扣73:矩阵置零
算法·leetcode·矩阵
云手机掌柜4 天前
Tumblr长文运营:亚矩阵云手机助力多账号轮询与关键词布局系统
大数据·服务器·tcp/ip·矩阵·流量运营·虚幻·云手机