You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效寻找带等待机制的二进制矩阵中从左上角到最右列的最小代价路径

Hey there! Let's work through this minimum cost path problem step by step, since brute force is clearly not feasible and your initial dynamic programming (DP) attempts hit some roadblocks.

Problem Clarification

First, let's make sure we're on the same page with the problem rules (based on your example):

  • The matrix columns represent vertices in order (A → B → C → D, left to right).
  • The matrix rows represent discrete time steps (t=0, 1, 2, ...).
  • A value 1 at matrix[t][j] means you incur a penalty if you move to vertex j at time t.
  • You start at the top-left corner (time t=0, vertex A).
  • At each time step, you have two choices:
    1. Wait: Stay at your current vertex (no penalty added).
    2. Move: Shift to the next vertex (add matrix[t][j] to your total cost if you move to vertex j at time t).
  • Your goal is to reach the rightmost column (any time step) with the smallest possible total penalty.

Efficient DP Solution

The key is to define a DP state that tracks the minimum cost to reach each vertex at each time step. Here's how to implement it:

1. State Definition

Let dp[t][j] represent the minimum total penalty to reach vertex j at time t.

2. Initialization

  • Start at time t=0 and vertex A (column 0): dp[0][0] = matrix[0][0] (this is the cost to move to A at time 0).
  • All other states at t=0 are set to infinity (∞), since you can't reach vertices B/C/D at time 0 without moving multiple steps in one time unit.

3. State Transition

For each time step t ≥ 1 and each vertex j:

  • If j = 0 (vertex A): You can only wait from the previous time step (you can't move left), so:
    dp[t][0] = dp[t-1][0]
    
  • If j > 0: You have two options, take the minimum of both:
    1. Wait at vertex j: Carry over the cost from the previous time step at the same vertex:
      option_wait = dp[t-1][j]
      
    2. Move to vertex j from j-1: Add the penalty (if any) for moving to j at time t to the cost of being at j-1 at t-1:
      option_move = dp[t-1][j-1] + matrix[t][j]
      
    Then:
    dp[t][j] = min(option_wait, option_move)
    

4. Compute the Result

After filling the DP table, the answer is the minimum value in the rightmost column (all time steps for the final vertex):

min_total_cost = min(dp[t][n-1] for t in 0..m-1)

Where m is the number of rows (time steps) and n is the number of columns (vertices).

Example Walkthrough

Let's apply this to your sample matrix (vertices A=0, B=1, C=2, D=3; time t=0-4):

t\vA (0)B (1)C (2)D (3)
00010
11001
21100
31111
40000
  • Initialization: dp[0][0] = 0, others are ∞.
  • t=1:
    • dp[1][0] = 0 (wait at A)
    • dp[1][1] = min(∞, 0+0) = 0 (move from A to B at t=1)
    • dp[1][2] = ∞, dp[1][3] = ∞
  • t=2:
    • dp[2][0] = 0
    • dp[2][1] = min(0, 0+1) = 0 (wait at B)
    • dp[2][2] = min(∞, 0+0) = 0 (move from B to C at t=2)
    • dp[2][3] = ∞
  • t=3:
    • dp[3][0] = 0
    • dp[3][1] = 0 (wait at B)
    • dp[3][2] = min(0, 0+1) = 0 (wait at C)
    • dp[3][3] = min(∞, 0+1) = 1 (move from C to D at t=3)
  • t=4:
    • dp[4][0] = 0
    • dp[4][1] = 0
    • dp[4][2] = 0
    • dp[4][3] = min(1, 0+0) = 0 (move from C to D at t=4)

The minimum cost is min(∞, ∞, ∞, 1, 0) = 0, which matches your optimal path.

Why Your Initial DP Attempts Might Have Failed

Chances are you didn't account for the "wait" option in your state transitions. If you only considered moving from left to right across columns without allowing waiting (staying at the same vertex across time steps), you'd miss optimal paths that wait for penalty-free time slots to move. This DP approach explicitly models both waiting and moving, ensuring you capture all possible paths efficiently.

Time Complexity

This solution runs in O(m*n) time, where m is the number of time steps (rows) and n is the number of vertices (columns). This is linear with respect to the matrix size, far better than the exponential brute-force approach.

内容的提问来源于stack exchange,提问作者Kemonius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:17:45