网站的类别,中英双语 网站 模板,商品标题优化,江苏短视频seo搜索2025-12-14#xff1a;交替方向的最小路径代价Ⅱ。用go语言#xff0c;给你一个 m 行 n 列的网格。进入格子 (i, j) 的花费为 (i1)*(j1)。另外每个格子还有一个等待代价矩阵 waitCost#xff0c;waitCost[i][j] 表示在该格子停留 1 秒钟需要支付的费用。
路径从时间步 1 开始…2025-12-14交替方向的最小路径代价Ⅱ。用go语言给你一个 m 行 n 列的网格。进入格子 (i, j) 的花费为 (i1)*(j1)。另外每个格子还有一个等待代价矩阵 waitCostwaitCost[i][j] 表示在该格子停留 1 秒钟需要支付的费用。路径从时间步 1 开始第一步进入起点 (0,0)并支付该格子的进入费用。之后时间按秒递增并且动作必须交替进行在奇数秒必须向右或向下移动到相邻格子进入新格子时支付该格子的进入费用在偶数秒必须在当前格子原地等待恰好 1 秒并为此支付该格子的 waitCost。目标是以最小的总费用到达终点 (m-1, n-1)。请计算并返回这个最小总成本。1 m, n 100000。2 m * n 100000。waitCost.length m。waitCost[0].length n。0 waitCost[i][j] 100000。输入m 2, n 3, waitCost [[6,1,4],[3,2,5]]。输出16。解释最佳路径为从第 1 秒开始在单元格 (0, 0)进入成本为 (0 1) * (0 1) 1。第 1 秒向右移动到单元格 (0, 1)进入成本为 (0 1) * (1 1) 2。第 2 秒在单元格 (0, 1) 等待支付 waitCost[0][1] 1。第 3 秒向下移动到单元格 (1, 1)进入成本为 (1 1) * (1 1) 4。第 4 秒在单元格 (1, 1) 等待支付 waitCost[1][1] 2。第 5 秒向右移动到单元格 (1, 2)进入成本为 (1 1) * (2 1) 6。因此总成本为 1 2 1 4 2 6 16。题目来自力扣3603。过程详细描述初始化起点和终点代码首先将起点(0,0)的代价设置为它的进入代价即(01)*(01) 1。这覆盖了输入waitCost矩阵中在(0,0)处的原始值原为6。同时将终点(m-1,n-1)的代价设置为0这可能是为了在DP计算中简化终点的处理因为终点不需要额外的等待代价但题目中终点需支付进入代价这里设置0可能是一种调整。初始化第一行i0对于第一行中的每个单元格(0,j)其中j从1到n-1代码计算到达该单元格的最小代价。代价计算方式为当前单元格的代价即waitCost[0][j]的初始值加上左侧单元格(0,j-1)的累积代价再加上当前单元格的进入代价j1因为i0进入代价为1*(j1)j1。例如对于j1f[0][1] f[0][1] f[0][0] 1 1初始f[0][1]为1f[0][0]为1结果为11114。这一步骤假设路径只能沿着第一行向右移动代价包括进入每个单元格的费用。初始化第一列j0对于第一列中的每个单元格(i,0)其中i从1到m-1代码计算到达该单元格的最小代价。代价计算方式为当前单元格的代价即waitCost[i][0]的初始值加上上方单元格(i-1,0)的累积代价再加上当前单元格的进入代价i1因为j0进入代价为(i1)*1i1。例如对于i1f[1][0] f[1][0] f[0][0] 1 1初始f[1][0]为3f[0][0]为1结果为31116。这一步骤假设路径只能沿着第一列向下移动代价包括进入每个单元格的费用。处理内部单元格i1且j1对于其他单元格(i,j)代码计算到达该单元格的最小代价考虑从左边单元格(i,j-1)或上边单元格(i-1,j)移动而来。代价计算方式为当前单元格的代价即waitCost[i][j]的初始值加上左边或上边单元格累积代价的最小值再加上当前单元格的进入代价(i1)*(j1)。例如对于单元格(1,1)计算min(f[1][0], f[0][1]) (11)*(11) min(6,4) 4 4 4 8然后加上初始f[1][1]2结果为10。这一步骤假设路径只能向右或向下移动代价仅包括进入费用而没有显式处理题目中的等待代价偶数秒等待。代码通过DP转移隐含地累积代价但等待代价未被直接纳入。返回结果经过上述计算后终点(m-1,n-1)的代价f[m-1][n-1]即为最小总代价。在示例中f[1][2]最终计算为16。代码返回该值作为结果。需要注意的是题目描述的交替规则奇数秒移动、偶数秒等待在代码中并未显式处理。代码实际上实现了一个标准的最小路径和DP其中每个单元格的代价是进入代价而等待代价可能通过初始waitCost矩阵的修改被间接包含但从代码逻辑看等待代价未被正确集成。输出结果与题目示例匹配的原因可能是DP计算巧合地覆盖了实际代价。复杂度分析时间复杂度代码主要包含三个循环初始化第一行O(n)、初始化第一列O(m)和处理内部单元格的双重循环O(mn)。由于m和n最多为100000且mn ≤ 100000整体时间复杂度为O(m*n)在约束下可行。额外空间复杂度代码直接修改输入的f矩阵即waitCost作为DP表未使用额外空间除了少量变量。因此额外空间复杂度为O(1)。总之代码通过动态规划计算路径代价但简化了题目规则。实际应用中如需严格处理交替移动和等待可能需要更复杂的状态设计。Go完整代码如下packagemainimport(fmt)funcminCost(m,nint,f[][]int)int64{f[0][0]1f[m-1][n-1]0forj:1;jn;j{f[0][j]f[0][j-1]j1}fori:1;im;i{f[i][0]f[i-1][0]i1forj:1;jn;j{f[i][j]min(f[i][j-1],f[i-1][j])(i1)*(j1)}}returnint64(f[m-1][n-1])}funcmain(){m:2n:3waitCost:[][]int{{6,1,4},{3,2,5}}result:minCost(m,n,waitCost)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defmin_cost(m,n,f):f[0][0]1f[m-1][n-1]0forjinrange(1,n):f[0][j]f[0][j-1]j1foriinrange(1,m):f[i][0]f[i-1][0]i1forjinrange(1,n):f[i][j]min(f[i][j-1],f[i-1][j])(i1)*(j1)returnf[m-1][n-1]# 测试if__name____main__:m,n2,3wait_cost[[6,1,4],[3,2,5]]print(min_cost(m,n,wait_cost))# 输出结果C完整代码如下#includeiostream#includevector#includealgorithmusingnamespacestd;intminCost(intm,intn,vectorvectorintf){f[0][0]1;f[m-1][n-1]0;for(intj1;jn;j)f[0][j]f[0][j-1]j1;for(inti1;im;i){f[i][0]f[i-1][0]i1;for(intj1;jn;j)f[i][j]min(f[i][j-1],f[i-1][j])(i1)*(j1);}returnf[m-1][n-1];}intmain(){vectorvectorintwaitCost{{6,1,4},{3,2,5}};coutminCost(2,3,waitCost)endl;return0;}