(C语言)华为OD机考:统一考试 C卷 + D卷 + B卷 +A卷
目前在考C卷,经过两个月的收集整理,C卷真题已整理完毕
抽到原题的概率为2/3到3/3,也就是最少抽到两道原题。请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。
真题目录:【C语言题解版】华为 OD 机试 C卷抽中题库清单(全真题库)含考点说明
专栏:(C语言)最新华为OD机试C卷+D卷+AB卷
题目描述
园区某部门举办了Family Day,邀请员工及其家属参加;
将公司园区视为一个矩形,起始园区设置在左上角,终点园区设置在右下角;
家属参观园区时,只能向右和向下园区前进,求从起始园区到终点园区会有多少条不同的参观路径。
输入描述
第一行为园区的长和宽;
后面每一行表示该园区是否可以参观,0表示可以参观,1表示不能参观
输出描述
输出为不同的路径数量
用例
输入 | 3 3 0 0 0 0 1 0 0 0 0 |
---|---|
输出 | 2 |
说明 | 无 |
解题思路
这个问题是一个典型的动态规划问题,主要解决的是在一个二维网格中,从左上角到右下角的所有可能路径的数量,其中一些单元格可能是不可达的。
动态规划的基本思想是将一个复杂的问题分解成一系列简单的子问题,并存储子问题的解,以便后续需要时直接使用,而不是重新计算。这种方法通过避免重复计算同一个子问题来节省计算时间。
在这个问题中,我们定义dp[i][j]为从起始点到网格中位置(i,j)的所有可能路径的数量。我们需要找到一个递推关系,用更小的子问题的解来表达dp[i][j]。
这里的递推关系是基于这样一个事实:到达一个特定单元格的路径只能来自其左边的单元格或其上边的单元格。因此,到达该单元格的所有可能路径的数量就是到达其左边单元格的所有可能路径的数量和到达其上边单元格的所有可能路径的数量的和。这就是我们的递推关系。
具体来说,如果我们在第一行或第一列,那么只有一种可能的路径(沿着边缘)。所以,对于第一行和第一列,dp[i][j]就等于其左边单元格或上边单元格的dp值。对于其他位置,dp[i][j] = dp[i-1]