← 返回编程题库
coding-grid-min-path-sum简单免费版2000ms未尝试

网格最小代价路径

Minimum Cost Path Through a Grid

开始编码

某调度器要把一个任务在「资源瓦片地图」上送达:行表示 CPU 档位逐档加大,列表示内存档位逐档加大,瓦片 grid[r][c] 是任务停留在档位组合 (r, c) 时所产生的非负美元计费。一条调度轨迹从最低档 (0, 0) 启动,每一步只能在一个维度上加一档——要么把行档位往下推一格、要么把列档位往右推一格——直到抵达最高档 (R-1, C-1)。总花费等于轨迹经过的每一格 grid 之和(含两端)。我们要找的是最便宜那条轨迹:让累积账单最小化的方案。

请实现 solution(grid: list[list[int]]) -> int。返回从 (0, 0)(R-1, C-1)、只走右/下的所有单调路径中累积和的最小值。轨迹上的每一格都计费,不能跳过。

示例 1——经典小样:solution([[1, 3, 1], [1, 5, 1], [4, 2, 1]]) 返回 7。最优轨迹沿首行右移、再沿末列下降:(0,0)→(0,1)→(0,2)→(1,2)→(2,2),累积 1 + 3 + 1 + 1 + 1 = 7。绕左下角的轨迹累积 1 + 1 + 4 + 2 + 1 = 9;穿过中心 5 的轨迹更糟。DP 在每个格子总是继承「更便宜那位前驱」的代价,因此自然得到 7。

示例 2——只有起点的退化网格:solution([[7]]) 返回 7。当 R=C=1 时起点与终点重合,唯一轨迹只覆盖一格,结果就是这一格的代价。单行 1xC(被迫扫完整行,结果等于行和)与单列 Rx1(被迫扫完整列,结果等于列和)也是同样的「唯一轨迹」情形——DP 没有任何选择空间。

示例 3——单列退化:solution([[2], [3], [4]]) 返回 9。由于 C = 1,没有右移的选项,只能逐格下降,累积 2 + 3 + 4 = 9。这条边界很有意思:每个内部格子的 min(...) 都退化成「唯一可用前驱」——非常适合用来揪出第 0 行/第 0 列初始化里的 off-by-one 错误。

题面规模下 2-D DP 完全够用:最多 R*C ≤ 4·10⁴ 个瓦片,每格 O(1) 处理,约 4 万次基本运算,远低于 2 秒预算。直接写显式的 2-D 表(更易读)或用滚动 1-D 缓冲(更省内存)都可通过。

约束条件

  • 1 ≤ R, C,其中 R = len(grid)、C = len(grid[0])
  • R ≤ 200 且 C ≤ 200,且 R*C ≤ 4*10^4
  • 所有行长度都为 C(矩形网格)
  • 0 ≤ grid[i][j] ≤ 10^4(格子均为非负代价)
  • 允许的移动:向右 (r, c) → (r, c+1) 或向下 (r, c) → (r+1, c)。不允许斜向、不允许向上/向左。
  • 路径从 (0, 0) 出发,到 (R-1, C-1) 结束;两个端点都计入总和。

样例

Case 1 · single cell

输入: [[[7]]]

期望: 7

R=C=1,路径就是起点(也等于终点),结果是 grid[0][0]=7。

Case 2 · 3x3 LeetCode-64 canonical

输入: [[[1,3,1],[1,5,1],[4,2,1]]]

期望: 7

最优路径为 1→3→1→1→1=7(沿首行向右,再沿末列向下)。穿中心 5 或左下角 4 的路径都更贵,DP 在每格挑更便宜的来路。

Case 3 · 1-column forced descent

输入: [[[2],[3],[4]]]

期望: 9

C=1 时只能逐格向下,唯一路径累加 2+3+4=9。这是 min 在唯一前驱下退化的边界情形。

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

加载编辑器...
计时0:00

默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。

Case 1 · single cell

输入: [[[7]]]

期望: 7

R=C=1,路径就是起点(也等于终点),结果是 grid[0][0]=7。

Case 2 · 3x3 LeetCode-64 canonical

输入: [[[1,3,1],[1,5,1],[4,2,1]]]

期望: 7

最优路径为 1→3→1→1→1=7(沿首行向右,再沿末列向下)。穿中心 5 或左下角 4 的路径都更贵,DP 在每格挑更便宜的来路。

Case 3 · 1-column forced descent

输入: [[[2],[3],[4]]]

期望: 9

C=1 时只能逐格向下,唯一路径累加 2+3+4=9。这是 min 在唯一前驱下退化的边界情形。