通过率 46% · 提交 990 · 通过 452
小慕的公司组织了一次Family Day活动,邀请员工和家属参观。园区被看作一个矩形网格,起点设在左上角,终点设在右下角。参观时,大家只能向右或向下移动。小慕想知道,从起点到终点一共有多少条。
这类题属于华为 OD 机考真题方向中「100分 / DP」方向的高频题型,通常考察对「100分 / DP」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第一行为园区长和宽;后面每一行表示该园区是否可以参观,0表示可以参观,1表示不能参观
1 <= 园区长, 园区宽 <= 100
输出为不同的路径数量
示例 1
输入示例
3 3 0 0 0 0 1 0 0 0 0
输出示例
2
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
注意,本题与 不同路径 II 完全一致,属于经典的 二维 DP 路径问题。
使用 动态规划 解决。定义 dp[i][j] 表示从起点到达网格中第 i 行第 j 列位置的不同路径数。
如果当前位置 (i, j) 不是障碍物,则路径数等于上方和左方路径数之和:
如果当前位置是障碍物,则路径数为 0:
(0, 0) 如果无障碍物,则 dp[0][0] = 1,否则为 0。思路展开 先把题目翻译成网格模型:园区是一个 n 行 m 列的网格,输入中每个格子的值为 0 或 1,1 表示该位置不能通行(代码中 grid[i][j] == 1 的分支处理的就是它),起点在左上角 (0,0),终点在右下角 (n-1,m-1),每一步只能向右或向下。 dp[i][j] 表示从起点走到第 i 行第 j 列一共有多少条不同路径。因为只能向右或向下走,到达 (i,j) 的最后一步要么来自左边的 (i,j-1),要么来自上边的 (i-1,j),这两类路径互不重叠,所以 dp[i][j] = dp[i][j-1] + dp[i-1][j];若 (i,j) 本身不可通行,代码用 continue 跳过,它的路径数保持为 0,后续格子自然不会从这里获得任何方案数。 初始化时,第一行和第一列各自只有一条一路向右或一路向下的走法,所以逐格记为 1;而一旦在第一行或第一列上遇到障碍,它后面的格子就再也无法沿边界到达,代码用 break 提前停止,这些格子保持默认值 0。 双重循环按行从上到下、按列从左到右推进,保证计算 dp[i][j] 时它依赖的左、上两个值都已经算好。最后输出 dp[n-1][m-1],即到达右下角的路径总数。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。