当前位置: 首页 > news >正文

AC鸭的训练分组

题目描述

AC鸭准备参加一次训练营,一共有 n 个训练项目,第 i 个项目需要花费 ai​ 分钟。

训练老师要求 AC鸭按顺序完成所有项目,并且可以把这些项目分成不超过 m 组。每一组必须是连续的一段项目,同一组项目在同一天完成。

AC鸭不想让某一天太累,所以他希望所有天数中,花费时间最多的那一天尽量少。

请你求出这个最小可能值。

输入格式

第一行两个整数 n,m表示训练项目数量和最多可以分成的组数。

第二行 n 个整数,第 i 个整数表示第 i 个训练项目需要花费的时间 ai​。

输出格式

输出一个整数,表示最小可能的最大单组花费时间。

样例

输入数据 1

5 2 7 2 5 10 8

输出数据 1

18

样例解释

可以分成 [7,2,5]和[10,8] 两组,最大花费为 18。

数据规模

对于 20% 的数据,1≤n≤20。

对于 50% 的数据,1≤n≤1000,1≤ai≤1000。

对于 100%100% 的数据,1≤n≤100000,1≤m≤n,1≤ai≤109。

题解

问题分析

该问题要求将n个连续的训练项目分成不超过m组,使得各组时间之和的最大值最小化。这是一个典型的最小化最大值问题,通常可以通过二分查找结合贪心验证的方法解决。

解决思路

  1. 二分查找框架:确定可能的最小最大值的范围。最小可能值为单个项目的最大时间(因为至少需要包含一个项目),最大可能值为所有项目时间之和(即不分组的情况)。
  2. 验证函数:对于给定的中间值mid,检查是否可以将项目分成不超过m组,且每组的时间之和不超过mid。如果可以,则尝试更小的mid;否则,尝试更大的mid。

算法步骤

  1. 初始化二分边界:左边界left为数组中的最大值,右边界right为数组所有元素之和。
  2. 二分查找:在left <= right的条件下,计算mid = (left + right) / 2,并验证mid是否可行。
  3. 验证函数:遍历数组,累加项目时间,若超过mid则分组数加1,并重置累加值为当前项目时间。最终检查分组数是否 <= m。

复杂度分析

  • 时间复杂度:O(n log(sum(a_i))),其中sum(a_i)是数组元素之和。二分查找的复杂度为O(log(sum(a_i))),每次验证需要O(n)时间。
  • 空间复杂度:O(1),仅使用常数额外空间。

C++代码实现

#include <bits/stdc++.h> using namespace std; int n,m; long long a[100010] = {0}; long long l = 0,r = 0,mid; bool p(long long s){ long long s1 = 0,s2 = 1; for(int i = 1;i <= n;i++){ s1 = s1 + a[i]; if(s1 > s){ s1 = a[i]; s2++; } if(s2 > m){ return 0; } } return 1; } int main(){ cin>>n>>m; for(int i = 1;i <= n;i++){ cin>>a[i]; l = max(a[i],l); r = r + a[i]; } while(l < r){ mid = (l + r) / 2; if(p(mid)){ r = mid; }else{ l = mid + 1; } } cout<<r; return 0; }

该方法高效且易于实现,适用于大规模数据。

http://www.jsqmd.com/news/797663/

相关文章:

  • 5步掌握Betaflight 2025升级:从配置到飞行的完整解决方案
  • 从‘结势垒’到‘混合PIN’:手把手带你用TCAD仿真复现JBS/MPS的性能差异
  • 降AI提示词大全!10个prompt让AI输出人类味+嘎嘎降AI兜底!
  • AD9361射频收发器:高效频点切换与状态机管理的实战解析
  • 3步快速绕过iOS 15-16激活锁:Applera1n终极免费解决方案
  • Upsonic AI智能体框架:生产级安全、多模态与可观测性实战指南
  • Python 爬虫进阶技巧:批量接口请求参数批量生成
  • 编程分析职场会议时长,参会人数,落地成果数据,统计无效会议占比,精简会议流程,为企业节省大量职场工作时间。
  • 告别Navicat!免费开源的Beekeeper Studio,从安装到连接MySQL/PostgreSQL保姆级教程
  • 如何在无GPU群晖设备上开启完整AI相册功能:Synology Photos面部识别终极指南
  • FoalTS 错误处理机制:构建健壮的后端应用
  • JeecgBoot 低代码 v3.9.2 发布:从“拖拉拽”到“说一句话”,开启低代码 v2.0 时代!
  • Unity-Editor-Toolbox 层级窗口增强:如何显示脚本、标签、图层等关键信息
  • 终极指南:reverse-shell多语言payload技术详解 - Python、Perl、NC、SH实现对比
  • 无语!竟然会有这个原因导致用Gerrit+Git进行多人协作开发时经常有代码冲突/功能出错
  • 从云端到相纸:一位暗房老法师的AI印相革命——Midjourney+Raspberry Pi物理归档系统(含银盐质感LUT移植教程)
  • 哪个降AI软件好?2026年4款主流降AI工具按场景对位横评!
  • Cadence实战篇:STM32核心电路从零到一的原理图设计全流程
  • 编写程序统计员工出差频次,费用,工作成果,核算出差性价比,删除无意义出差任务,缩减企业差旅整体开支。
  • Swift RxSwift进阶指南:Subjects使用与变换操作深度解析
  • Java运算符 一篇带你搞懂运算符
  • 英雄联盟Akari助手:从新手到高手的智能游戏伴侣完整指南
  • PCF8591模块的IIC地址冲突了怎么办?一文讲透硬件地址引脚(A0,A1,A2)的配置与实战
  • CloudCompare——点云变换实战:从原理到应用的完整指南【2025】
  • 从混成之物到 Clean Core,老子这句话给 SAP ABAP 开发的一套底层修行
  • Open3D 可视化(10) ——自定义可视化背景颜色与点的大小【2026最新版】
  • XMly-Downloader-Qt5:跨平台喜马拉雅音频下载解决方案的技术重构与实现深度解析
  • 2026年5月淮安财税公司推荐:六家专业评测夜间记账防加班疲惫 - 品牌推荐
  • 别光编译了,动手改两行WRK内核代码试试?给Windows Server 2003加个‘彩蛋’的极简教程
  • 别再手动调参数了!用红外遥控器一键控制你的Arduino麦轮小车