【华为OD机试真题】423、项目排期 、最快完成所有工作的天数 | 机试真题+思路参考+代码解析(CD卷)(C++)

华为OD机试 - 项目排期 - 二分查找、回溯(Python/JS/C/C++ 2024 D卷 200分) 二分查找结合回溯的方法能够高效地在可能的天数范围内找到最小的可行天数。 阅读详情

一、题目

题目描述

项目组共有N个开发人员,项目经理接到了M个独立的需求,每个需求的工作量不同,且每个需求只能由一个开发人员独立完成,不能多人合作。假定各个需求直接无任何先后依赖关系,请设计算法Q帮助项目经理进行工作安排,使整个项目能用最少的时间交付

输入输出

输入
第一行输入为M个需求的工作量,单位为天,用逗号隔开。
例如:X1,X2,X3…Xm
表示共有M个需求,每个需求的工作量分别为X1天,X2天…Xm天。其中0<M<30; 0<Xm<200
第二行输入为项目组人员数量N,例如:表示共有5名员工,其中0<N<10
输出
最快完成所有工作的天数

样例1

输入
6 2 7 7 9 3 2 1 3 11 4
2
输出
28
说明:
共有两位员工,其中一位分配需求6 2 7 7 3 2 1共需要28天完成,另一位分配需求9 3 11 4共需要27天完成,故完成所有工作至少需要28天。

样例2

输入
3 6 9 12 15 18 21 24 27 30
6
输出
30

一、代码与思路

🧠C++语言思路

1.首先,将需求的工作量按照从大到小排序,以平衡员工的负载。
2.创建一个长度为N的数组employee hours,用于记录每个员工已分配的工作量。
3.初始化一个变量min time为INT MAX,用于记录最短完成时间。
4.使用回溯法尝试所有的分配方案:

  • 定义一个回溯函数backtrack,参数为当前需求的索引i。
  • 如果所有任务已分配完毕,更新最短完成时间为employee hours数组中的最大值,然后返回。
  • 遍历所有员工,尝试将当前需求分配给每个员工:
    • 如果当前分配方案已经超过最短时间,跳过。
    • 将当前需求的工作量加到该员工的工作量中。
    • 递归调用backtrack函数,继续分配下一个需求。
    • 将当前需求的工作量从该员工的工作量中减去(回溯)

5.调用回溯函数backtrack(0)开始尝试所有分配方案。
6.返回最短完成时间min time作为结果。

✅C++代码

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using std::cin;
using std::cout;
using std::string;
using std::vector:

/**
* 验证是否可以将任务分配给N个人,使得每个人的时间不超过T
* @param workloads 任务列表(需降序列表)
* @param n 人数
* @param T 候选时间
* @return 是否可行
*/

bool idPossible(vector<int> workloads, int n, int T)
{
	// 降序排序,优先处理最大任务
	sort(workloads.begin(), workloads.end(), std::greater<int>());
	vector<int> workers(n, 0); // 记录每个员工当前的总工作量
	// 遍历每个任务
	for (int w : workloads)
	{
		// 找到当前工作量最小的员工
		int min_idx = 0;
		int min_time = workers[0]; // 记录最小工作量的员工id和工作量
		// 遍历每个员工
		for (int i = 0; i < n; ++i)
		{
			// 若该员工当前工作量小于当前任务,则更新最小工作量
			if (workers[i] < min_time)
			{
				min_time = workers[i]; // 更新最小工作量
				min_idx = i; // 更新最小工作量的员工id
			}
		}
		// 若无法分配给任何人,则候选时间不可行
		if (min_time + w > T)
		{
			return false;
		}
		workes[min_idx] += w; // 分配给最小工作量的员工
	}
	return true; // 所有任务均分配给员工且每个员工的工作量不超过候选时间
}
int main(void)
{
	// 读取输入的任务列表
	string line;
	std::getline(cin, line);
	// 处理逗号变为空格
	for(char &c : line)
	{
		if (c == ',')
		{
			c = ' ';
		}
	}

	vector<int> workloads; // 存储的任务列表
	stringstream ss(line);
	int num;
	while (ss >> num)
	{
		workloads.push_back(num);
	}

	// 读取员工的数量
	int num_works = 0;
	cin >> num_works;

	// 启用二分查找
	int left = std::*max_element(workloads.begin(), workloads.end()); // left为最大的单个任务的时间
	int right = std::accumulate(workloads.begin(), workloads.end(), 0); // right为所以任务时间的总和

	// 二分查找查找最小时间的可行性
	while (left < right)
	{
		int mid = (left + right) / 2; // 取中间值
		if (isPossible(workloads, num_works, mid)
		{
			right = mid; // 当前时间可行缩小右边界
		}
		else 
		{
			left = mid + 1; // 当前时间不可行,扩大左边界
		}
	}
	// 输出结果
	cout << left << "\n";

	return 0;
}



华为OD机试E卷 - 项目排期(Java & Python& JS & C++ & C ) 项目组共有N个开发人员,项目经理接到了M个独立的需求,每个需求的工作量不同,且每个需求只能由一个开发人员独立完成,不能多人合作。假定各个需求直接无任何先后依赖关系,请设计算法帮助项目经理进行工作安排,使整个项目能用最少的时间交付。 阅读详情

相关推荐

从实验室到生活:构建一份全面的手机相机主观画质评测指南

本文详细介绍了如何从实验室数据转向实际体验,构建全面的手机相机主观画质评测指南。通过基础装备清单、室内外场景实战评测及数据之外的感知艺术,帮助用户发现手机相机在色彩还原、动态范围和夜景模式等方面的真实表现。特别关注主观体验与客观参数的差异,提供实用的评测技巧和报告撰写心法。

weixin_30940783的博客 308

华为机考真题 -- 项目排期

说明:共有两位员工,其中一位分配需求6 2 7 7 3 2 1共需要28天完成,另一位分配需求9 3 11 4共需要27天完成,故完成所有工作至少需要28天。项目组共有 N 个开发人员,项目经理接到了 M 个独立的需求,每个需求的工作量不同,且每个需求只能由一个开发人员独立完成,不能多人合作。X1 X2 X3 ... Xm,表示共有 M 个需求,每个需求的工作量分别为X1天,最快完成所有工作的天数,例如:25,表示最短需要25天完成所有工作。第一行输入为 M 个需求的工作量,单位为天,用空格隔开。

qq_25360769的博客 307

避坑指南:Win11修改用户文件夹名称后,如何彻底解决残留文件与路径错误?

本文针对Win11用户修改用户文件夹名称后遇到的残留文件与路径错误问题,提供了一套完整的解决方案。从诊断进程占用、使用资源监视器与命令行强力清理,到修复系统环境变量与软件配置,并详细介绍了创建符号链接这一终极兼容方案,帮助用户彻底解决路径依赖问题,恢复系统稳定。

pz890123的博客 829

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更800道)

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更800道) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试

KJ.JK 3460

SAP中MRP运行计划行超限问题的分析与解决

SAP中基于生产性物料的采购特点,通常会采用采购计划协议的方式进行采购。其具体的采购计划通常来自于成品计划独立需求,然后通过物料清单,经由MRP跑出。 在采购计划协议中的计划行中,存在一个计划行号,随着MRP在不断跑出新的计划行,该行号资源会消耗完。当计划行号消耗完后,MRP不会再跑出新的计划行。且在MD04或MD02中看不到类似提示信息。此时可以通过MD05来查看是否出现类似下图的提示信息。 ...

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 3842

uniapp ios原生插件开发 (framework,cocoapods)

已知UniApp的插件开发方式有两种, 第一种 Xcode Framework的方式,这种方式是官方指定的方式。 这种方式的优点就是简单直接, 但也有不足,比如当插件需要引入一些三方库时,操作起来就不是那么方便。 而使用Cocoapods则可以很方便的引入三方库。 接下来,本文探索使用Cocoapods的方式来进行UniApp插件开发。

Rey的技术博客 9821

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更838道)

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更838道) 为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2

KJ.JK 2704

数仓建模—维度建模之维度表

首先要学会识别维度,维度是相对稳定的、可抽象具有共性的、固有的(天然的)描述度量或事实的上下文属性信息,失去维度信息的度量信息是没有意义的或者说是失去维度信息的事实表是没有意义的。其次要掌握维度表的设计原则和设计流程,从而更加科学的设计维度表,其实这些东西都是术,我们一直都说一句话大道至简,其实如果你掌握了精髓,抛开这些术也可以做到得心应手,这就像张无忌练太极剑一样,忘记了才能达到道的境界,也就是无我,如果做不到就记住这些原则加以应用从而达到术的境界。

2401_84052244的博客 4361

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更900道)

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更900道) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试

KJ.JK 3571

Dify使用教程3:Dify创建工作流

Dify使用教程3:Dify创建工作流 接着,我们连接下一个节点:“LLM”填入上下文变量为:result。这时候知识库就添加成功了。添加新节点:结束节点。

拥抱具身智能,昇腾Ascend C 5128

在Simulink中进行基于强化学习控制策略的三相逆变器仿真

本文详细介绍了在Simulink中实现基于强化学习控制策略的三相逆变器仿真的完整流程。主要内容包括:1)准备工作,确保MATLAB/Simulink及相关工具箱安装;2)构建三相逆变器基础模型,包含电源、全桥电路、LC滤波器和负载;3)重点阐述强化学习控制器设计,涉及状态空间、动作空间定义,奖励函数设计和算法选择;4)实现控制逻辑,包括环境创建、代理配置和训练过程;5)仿真设置与结果分析。文章强调了模型调试优化的重要性,并建议结合文献研究提升控制效果。该方案为开发自适应电力电子控制系统提供了实用指南。

amy_mhd的博客 269

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更825道)

华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,一文带你读懂华为OD,华为机试e卷

KJ.JK 3217

手把手教你学SOME/IP「3.2.1.发布/订阅行为」

本文详细介绍了SOME/IP协议中的服务发现机制,重点解析了发布/订阅行为的流程。主要内容包括:1)服务发布与Method通信流程,涵盖find/offer报文交互、TTL保活机制及异常处理;2)服务订阅与Event通信流程,包括subscribe/ack报文交互和组播延迟机制;3)特殊场景如快速发送、半周期回复、重置订阅等机制。通过邮局订阅报纸的类比,帮助理解服务发现的核心原理,并强调流程图对于问题定位的重要性。文章为SOME/IP协议的工程实现提供了实用指导。

nihaoljq2010的博客 1220

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更848道)

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更848道) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试

KJ.JK 2774

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更890道)

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更890道) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试

KJ.JK 3488

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更814道)

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更814道) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试

KJ.JK 9568

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

华为OD机试 2025C卷目录,五种语言解答,在线OJ刷题练习(已更858道)

华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,一文带你读懂华为OD,华为机试e卷

KJ.JK 2626

华为OD机试 2025双机位A卷目录,五种语言解答,在线OJ刷题练习(已更900道)

华为OD机试 2025双机位A卷目录,五种语言解答,在线OJ刷题练习(已更900道) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华

KJ.JK 2285

Scrum 敏捷框架完全指南

形式化的质量检查清单,只有满足 DoD 的增量才能交付。

Cat_fish_snow的博客 369

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 216

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 330

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 385

[C++]:6.STL:vector

今天就要开始学vector容器,这节课我们主要学习vector中经常会用到的函数,并且给出该函数的模拟实现。话不多说,直接上干货。下面是本章的思维导图,那么,让我们开始吧!

2301_80817679的博客 136

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析

蓝桥杯报名正在火热进行(软件赛报名 2026-10-08—12-18,省赛 2027-04-10),电子学会 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名也已开启(9/23—12/2),全国青少年信息素养大赛算法应用主题赛同步推进——把 LCA 这个模板练熟,正是冲刺这些赛事树型考点的关键一步。所谓「最近公共祖先」:在一棵以某个节点为根的树里,两个节点 u、v 向上追溯,最早交汇的那个祖先就叫它们的 LCA。比如家谱里,你和你表哥最近的共同长辈就是你们的祖父。

IT_Scratch的博客 532
上一篇: 【华为OD机试真题】428、连续字母长度 | 机试真题+思路参考+代码解析(E卷)(C++)
下一篇: LeetCode_26. 删除有序数组中的重复项
吴_知遇
博客等级 码龄7年 100粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值