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

网格盈亏的最大累积路径

Maximum P&L Path Through a Grid

开始编码

某情景分析工具用两个压力维度刻画组合的当日盈亏:行表示某一因子(比如平行利率冲击)的强度逐级加深,列表示另一因子(比如信用利差冲击)的强度逐级加深。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——2×2:solution([[1, 2], [3, 4]]) 返回 8。两条合法路径:(0,0)→(0,1)→(1,1) 累积 1+2+4 = 7,以及 (0,0)→(1,0)→(1,1) 累积 1+3+4 = 8,第二条胜出。

示例 2——含负值的 3×3:solution([[1, -2, 3], [4, 5, -6], [7, 8, 9]]) 返回 29。一共有 C(4,2)=6 条单调路径,最优路径沿最左列向下、再沿最底行向右:(0,0)→(1,0)→(2,0)→(2,1)→(2,2),累积 1+4+7+8+9 = 29。路径 1 → -2 → 5 → 8 → 9 = 21 因为踩到 -2 而吃亏;路径 1 → 4 → 5 → -6 → 9 = 13 因为穿过 -6 而更差。DP 递推会在每个格子自动挑选更优的来路,从而绕开这两个负值。

示例 3——单格:solution([[7]]) 返回 7。当 R=C=1 时路径就是起点本身(也等于终点),结果就是这一格的值。同样的退化情形:1×C 单行(路径被迫走完每一列,结果等于这行之和)和 R×1 单列(结果等于这列之和)。

标准的 2-D DP 在题面规模下完全够用:R*C ≤ 4·10⁴ 个格子,每格 O(1) 处理,总共约 4 万次基本运算,远低于 2 秒预算。直接写显式的 2-D 表(更清晰)或者用 O(C) 的滚动数组(更省内存)都可以通过。

约束条件

  • 1 ≤ R, C,其中 R = len(grid)、C = len(grid[0])
  • R ≤ 200 且 C ≤ 200,且 R*C ≤ 4*10^4
  • 所有行长度都为 C(矩形网格)
  • -10^4 ≤ 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 · 2x2 prefer-down path

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

期望: 8

两条单调路径:上→右走 1+2+4=7;下→右走 1+3+4=8。下走那条更优,最大和为 8。

Case 3 · 3x3 with negatives — DP avoids loss cells

输入: [[[1,-2,3],[4,5,-6],[7,8,9]]]

期望: 29

6 条单调路径中,沿左列下、底行右的路径 1→4→7→8→9=29 最优。DP 在每格选择更优来路,自动避开 -2 与 -6。

最近提交

还没有提交记录。

编码区

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

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

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

Case 1 · single cell

输入: [[[7]]]

期望: 7

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

Case 2 · 2x2 prefer-down path

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

期望: 8

两条单调路径:上→右走 1+2+4=7;下→右走 1+3+4=8。下走那条更优,最大和为 8。

Case 3 · 3x3 with negatives — DP avoids loss cells

输入: [[[1,-2,3],[4,5,-6],[7,8,9]]]

期望: 29

6 条单调路径中,沿左列下、底行右的路径 1→4→7→8→9=29 最优。DP 在每格选择更优来路,自动避开 -2 与 -6。