【秋招笔试】2025年8月10日大疆秋招机考改编题
✅ 秋招备战指南 ✅
💡 学习建议:
- 先尝试独立解题
- 对照解析查漏补缺
🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力
🌸 目前本专栏已经上线100+套真题改编解析,后续会持续更新的
春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗
题目一:小兰的图书馆路径规划
1️⃣:使用动态规划解决网格路径最小成本问题
2️⃣:处理边界条件,初始化第一行和第一列
3️⃣:应用状态转移方程计算最优路径
难度:中等
这道题目是经典的网格路径动态规划问题。关键在于理解只能向右或向下移动的限制,通过动态规划的状态转移方程 dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]) 来找到最小成本路径。需要特别注意边界条件的处理。
01. 小兰的图书馆路径规划
问题描述
小兰是一家大型图书馆的管理员。图书馆有一个巨大的书架区域,按照 行
列的网格排列。每个网格位置都有一个数字,表示在该位置整理书籍所需要的时间成本(单位:分钟)。
小兰需要从图书馆的入口(左上角位置)出发,到达图书馆的出口(右下角位置)。由于图书馆的通道设计限制,她只能沿着通道向右移动或向下移动,不能向左或向上移动,也不能斜向移动。
在移动过程中,小兰需要经过每个网格位置并花费相应的时间整理书籍。请帮助小兰规划一条路径,使得她从入口到出口的总时间成本最小。
输入格式
第一行包含两个正整数 和
,分别表示图书馆书架区域的行数和列数。
接下来 行,每行包含
个非负整数,第
行第
个数字表示位置
的时间成本。
输出格式
输出一个正整数,表示从入口到出口的最小总时间成本。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
21
数据范围
样例 | 解释说明 |
---|---|
样例1 | 小兰从位置 |
题解
这道题是经典的动态规划问题,也被称为"网格路径最小成本"问题。
问题分析:
从题目描述可以看出,小兰只能向右或向下移动,这意味着到达任意位置 只有两种可能:
- 从上方位置
向下移动而来
- 从左方位置
向右移动而来
因此,要使到达位置 的总成本最小,我们应该选择这两种路径中成本更小的那一条。
解法思路:
使用动态规划来解决这个问题。定义 表示从起点
到达位置
的最小总成本。
状态转移方程为:
(起点的成本就是该位置的时间成本)
其中 是位置
的时间成本。
边界处理:
- 第一行:只能从左边移动过来,
- 第一列:只能从上边移动下来,
算法步骤:
- 初始化
数组
- 设置起点:
- 处理第一行和第一列的边界情况
- 使用状态转移方程填充剩余的
数组
- 返回
,即到达终点的最小成本
时间复杂度分析:
时间复杂度为 ,需要遍历整个网格一次。对于题目给定的数据范围(
),这个复杂度完全可以接受。
空间复杂度可以优化到 ,因为计算当前行时只需要上一行的信息。
参考代码
- Python
import sys
input = lambda: sys.stdin.readline().strip()
def solve():
# 读取网格尺寸
m, n = map(int, input().split())
# 读取网格数据
grid = []
for i in range(m):
row = list(map(int, input().split()))
grid.append(row)
# 初始化动态规划数组
dp = [[0] * n for _ in range(m)]
# 设置起点
dp[0][0] = grid[0][0]
# 处理第一行(只能从左边过来)
for j in range(1, n):
dp[0][j] = dp[0][j-1] + grid[0][j]
# 处理第一列(只能从上边下来)
for i in range(1, m):
dp[i][0] = dp[i-1][0]
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力