贝壳找房 · 广度优先搜索(BFS) · 算法编程题
贝壳找房 广度优先搜索(BFS) n ≤ 20 时限 1 秒 / 64 MB

题目描述

牛牛一家昨天去了百丈飞瀑漂流,所以多了很多换洗的衣物,昨天玩的非常开心,但是今天晒衣服的时候却感到一阵无奈。
在费尽九牛二虎之力之后,牛牛终于洗完了 n 件衣服,但是,由于衣物上都沾着水,所以异常承重,而牛牛力气有限,一次最多可以拿起重量为 m 的东西。
因此,牛牛想要知道,每次拿起衣物去阳台晾晒的重量都不超过 m 的话,牛牛最少需要走几趟才能晒完所有衣服。

输入输出

输入描述
第一行输入两个正整数 n, m( 1≤ n≤ 20, 1≤ m≤ 1000000) ,代表衣物数量以及牛牛一次最多可以拿多重的东西。
第二行输入 n 个正整数 w_ 1, w_ 2,..., w_ n( 1≤ w_ i≤ 1000000) ,一次代表每件衣服的重量。
输出描述
输出仅一行一个整数,代表牛牛最少走的趟数。

样例共 1 组

样例 1 · 三件衣物重量总和为 9 ,所以牛牛可以一次性拿起。
输入
3 10
3 3 3
输出
1

算法解析依据一般

考点:广度优先搜索(BFS)

数据规模 n ≤ 20 | 限制 1 秒 / 64MB | 标准输入输出

题目画像

  • 数据规模:m ≤ 1e6,n ≤ 20
  • 元素值域:i ≤ 1e6(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:广度优先搜索(BFS)

按层扩散搜索,无权图上第一次到达即最短路。

思路框架(广度优先搜索(BFS) 通法 · 非本题专属)

  1. 起点入队并标记已访问。
  2. 每次取队首,把它的所有未访问邻居入队并记录步数。
  3. 第一次访问到目标时,步数即为最少步数。
  4. 网格类题目通常有 4(或 8)个方向,用方向数组统一处理。

实现要点:标记访问必须在入队时做,不能在出队时做,否则会重复入队甚至超时。

复杂度:时间 O(V+E) | 空间 O(V)

该范式的通法易错点

  • 出队才标记访问导致 MLE/TLE。
  • 网格边界没判,越界访问。

对照本题

  • 数据规模 n ≤ 20,允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 元素值域最大到 1e6 —— 求和 / 相乘时记得开 64 位整数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 3 10 / 3 3 3 → 输出 1

三件衣物重量总和为 9 ,所以牛牛可以一次性拿起。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:贝壳找房2023届校招移动端类试卷。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解