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]])
相关推荐
Konwledging3 小时前
线性代数-矩阵与向量相乘/矩阵和矩阵相乘
线性代数
郝学胜-神的一滴20 小时前
Qt6 + OpenGL 3.3 渲染环境搭建全指南:从空白窗口到专属渲染画布的优雅实现
数据结构·c++·线性代数·算法·系统架构·图形渲染
计算机安禾21 小时前
【数据结构与算法】第18篇:数组的压缩存储:对称矩阵、三角矩阵与稀疏矩阵
c语言·开发语言·数据结构·c++·线性代数·算法·矩阵
适应规律21 小时前
强化学习笔记(赵世钰)
笔记·线性代数·概率论
Book思议-1 天前
【数据结构】数组与特殊矩阵
数据结构·算法·矩阵
Eloudy1 天前
线性算子 A 的迹为 A 的任意矩阵表示的迹
机器学习·矩阵
net3m331 天前
可微分结构搜索, 可微分算子选择 —— 让程序“结构”也可学习 , 具体怎么实现结构的轮询穷举
人工智能·线性代数·矩阵
人道领域1 天前
LeetCode【刷题日记】:螺旋矩阵逆向全过程,边界缩进优化
算法·leetcode·矩阵
甄心爱学习1 天前
【word2vec】为什么要维护两套词向量矩阵?
机器学习·矩阵·word2vec
再卷也是菜2 天前
第一章、线性代数(2)高斯消元法
线性代数·算法