Skip to main content

174

dp[i][j] 表示 从(0,0) 开始到(i, j)所需的最小生命,与 dp[i][j] 表示 从(i,j) 开始到(m-1, n-1)所需的最小生命是完全不同的

前者完全做不了,为什么??

定义dp[i][j]表示从(0, 0)到(i, j)所需的最小生命

如果我们定义dp[i][j]表示从起点(0, 0)(i, j)所需的最小生命,这种方式是无法直接得到正确答案的。原因如下:

  1. 决策过程不完整:这种定义方式下,dp[i][j]依赖于它前面的状态,即依赖于dp[i-1][j]dp[i][j-1]。然而,这样的决策过程忽略了后续路径上的风险,即它不能保证骑士在到达终点之前的所有路径上都能存活下来。

  2. 路径依赖性:从(0, 0)(i, j)的路径上有多个可能的选择,这些选择可能导致不同的健康值变化。前向定义的dp状态会受到当前路径中所有先前选择的影响,而不是直接与终点相关的最小生命值。

定义dp[i][j]表示从(i, j)到(m-1, n-1)所需的最小生命

如果我们定义dp[i][j]表示从(i, j)到终点(m-1, n-1)所需的最小生命,这种方式是合理且可行的。原因如下:

  1. 明确的目标:这种定义方式直接考虑从当前位置到终点所需的最小生命值,明确了骑士在整个路径上的生存要求。

  2. 后向依赖性dp[i][j]可以通过考虑从(i, j)到其相邻的两个格子(右边和下面)的状态来更新。这种后向依赖保证了每一步都在考虑到达终点的最小生命值要求,使得整体状态更新过程合理且可行。

  3. 全局最优:通过反向推导,dp[i][j]能够正确地反映出从当前位置到终点所需的最小生命值,而不依赖于路径上的局部选择,从而保证了全局最优解。