园区参观路径 - 华为OD统一考试(C卷)
OD统一考试(C卷)
分值: 100分
题解: Java / Python / C++
题目描述
园区某部门举办了Family Day,邀请员工及其家属参加;
将公司园区视为一个矩形,起始园区设置在左上角,终点园区设置在右下角;
家属参观园区时,只能向右和向下园区前进,求从起始园区到终点园区会有多少条。
输入描述
输入第一行为园区的长和宽;
接下来每一行表示该园区是否可以参观,0表示可以参观,1表示不可以参观。
输出描述
输出为不同路径的数量
示例1
输入:
3 3
0 0 0
0 1 0
0 0 0
输出:
2
题解
经典的动态规划问题。
1、状态定义: dp[i][j] 表示走到格子 (i,j) 的方法数。
2、状态转移:
- 如果网格 (i,j) 上有障碍物,则 dp[i][j] 值为 0,表示走到该格子的方法数为 0;
- 否则网格 (i,j) 可以从网格 (i−1,j) 或者 网格 (i,j−1) 走过来,因此走到该格子的方法数为走到网格 (i−1,j) 和网格 (i,j−1) 的方法数之和,即 dp[i,j]=dp[i−1,j]+dp[i,j−1]。
Java
import java.util.Scanner;
/**
* @author code5bug
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取输入
int l = scanner.nextInt(), w = scanner.nextInt();
int[][] garden = new int[l][w];
for (int i = 0; i < l; i++) {
for (int j = 0; j < w; j++) {
garden[i][j] = scanner.nextInt();
}
}
// 初始化动态规划数组
int[][] dp = new int[l + 1][w + 1];
dp[0][1] = 1;
// 动态规划计算
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024华为OD机试真题题解 文章被收录于专栏
华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。 从 2024年4月24开始,考的都是华为OD统一考试(D卷),据已经参加D卷考试的同学反馈D卷和C卷是一样的,如果发现新题会及时更新。