新闻详情

新闻详情

首页 / 资讯中心 / 详情

两台机器独立任务调度【DP】【01 背包】

发布时间:2026/9/30 7:48:08来源:尧图网络
两台机器独立任务调度【DP】【01 背包】
两台机器独立任务调度题目描述有两台机器A和B以及n个彼此独立的任务。对于第i个任务如果安排到机器A上执行需要a[i]的时间如果安排到机器B上执行需要b[i]的时间。每个任务必须且只能选择一台机器执行。同一台机器在同一时刻最多只能执行一个任务因此分配到同一台机器上的任务需要依次执行机器A和机器B可以并行工作。请合理安排每个任务使得所有任务全部完成所需要的总时间最短。换句话说如果机器A上所有任务的总执行时间为T_A机器B上所有任务的总执行时间为T_B则总完成时间为max⁡(TA,TB)\max(T_A,T_B)max(TA​,TB​)要求最小化这个值。数据范围原题截图没有给出具体范围。如果使用下面的背包 DP可以假设1≤n≤1001\le n\le 1001≤n≤1001≤ai,bi≤10001\le a_i,b_i\le 10001≤ai​,bi​≤1000并且∑ai≤105\sum a_i\le 10^5∑ai​≤105更准确地说这个算法是否可行主要取决于∑ai\sum a_i∑ai​因为时间复杂度为O(n∑ai)O\left(n\sum a_i\right)O(n∑ai​)如果a[i]非常大例如达到10910^9109则不能直接使用这种 DP。输入格式第一行输入一个整数n表示任务数量。接下来n行每行两个整数a[i] b[i]表示第i个任务在机器A上执行需要a[i]时间在机器B上执行需要b[i]时间。输出格式输出一个整数表示完成全部任务所需要的最短时间。样例输入3 2 4 3 2 5 3输出5解释一种最优安排是任务 1 放到机器 A耗时2任务 2 放到机器 A耗时3任务 3 放到机器 B耗时3于是TA235T_A235TA​235TB3T_B3TB​3因此所有任务完成需要max⁡(5,3)5\max(5,3)5max(5,3)5不存在更优方案所以答案为5。思路这道题最关键的一点是任务的执行顺序其实不重要。因为同一台机器上的任务最终都是串行执行所以我们只关心每个任务到底分配给 A还是分配给 B。假设最终分配给机器 A 的任务集合为SSS。那么机器 A 的总执行时间为TA∑i∈SaiT_A\sum_{i\in S}a_iTA​∑i∈S​ai​没有分配给 A 的任务全部分配给 B因此TB∑i∉SbiT_B\sum_{i\notin S}b_iTB​∑i∈/S​bi​我们的目标就是min⁡Smax⁡(∑i∈Sai,∑i∉Sbi)\min_S \max \left( \sum_{i\in S}a_i, \sum_{i\notin S}b_i \right)minS​max(∑i∈S​ai​,∑i∈/S​bi​)这实际上是一个典型的0-1 背包变形。DP 状态设计令dp[j]dp[j]dp[j]表示当前已经处理过一些任务并且机器 A 的总执行时间恰好为j时机器 B 所需要的最小执行时间。例如dp[10] 7表示当前这些任务存在一种分配方式使A 总时间 10 B 总时间 7并且在所有 A 总时间恰好为 10 的方案中B 的 7 是最小的。初始化还没有处理任何任务时A 时间 0 B 时间 0所以dp[0]0dp[0]0dp[0]0其他状态暂时无法达到dp[j]∞dp[j]\inftydp[j]∞状态转移现在考虑第i个任务。它有且只有两种选择。1. 放到机器 B假设之前A 的时间 j B 的时间 dp[j]现在把任务i放到 BA 时间不变 B 时间 b[i]于是dp′[j]dp[j]bidp[j] dp[j]b_idp′[j]dp[j]bi​2. 放到机器 A如果把任务i放到 AA 时间 a[i] B 时间不变所以如果新的 A 时间为j之前的 A 时间应该为j−aij-a_ij−ai​于是dp′[j]dp[j−ai]dp[j] dp[j-a_i]dp′[j]dp[j−ai​]因此完整转移为dp′[j]min⁡(dp[j]bi,dp[j−ai])dp[j] \min \left( dp[j]b_i, dp[j-a_i] \right)dp′[j]min(dp[j]bi​,dp[j−ai​])当然第二种情况要求j≥aij\ge a_ij≥ai​为什么可以压缩成一维这和 0-1 背包完全一样。因为第i个任务只能使用一次所以我们可以让j从大到小枚举for(intj...;j0;--j)这样更新dp[j]时dp[j-a[i]]仍然是上一轮的状态不会重复使用当前任务。最终答案所有任务处理完成以后如果A 总时间 j B 总时间 dp[j]那么全部任务完成的时间就是max⁡(j,dp[j])\max(j,dp[j])max(j,dp[j])因此枚举所有可能的jansmin⁡jmax⁡(j,dp[j])\boxed{ ans \min_j \max(j,dp[j]) }ansjmin​max(j,dp[j])​即可。C 代码#includeiostream#includevector#includealgorithm#includeclimitsusingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cinn;vectorinta(n),b(n);intsumA0;for(inti0;in;i){cina[i]b[i];sumAa[i];}constlonglongINF(1LL60);// dp[j]:// A 的总执行时间恰好为 j 时// B 的最小总执行时间vectorlonglongdp(sumA1,INF);dp[0]0;// 已经处理过的任务在 A 上可能达到的最大时间intcurSum0;for(inti0;in;i){// 倒序枚举类似 0-1 背包for(intjcurSuma[i];j0;--j){longlongputAINF;longlongputBINF;// -------------------------// 情况 1任务 i 放到 B// -------------------------// A 的时间仍然是 jif(jcurSumdp[j]!INF){putBdp[j]b[i];}// -------------------------// 情况 2任务 i 放到 A// -------------------------// 原来 A 的时间为 j - a[i]if(ja[i]j-a[i]curSumdp[j-a[i]]!INF){putAdp[j-a[i]];}dp[j]min(putA,putB);}curSuma[i];}longlongansINF;for(intj0;jsumA;j){if(dp[j]INF)continue;// A 完成需要 j// B 完成需要 dp[j]// 所有任务完成时间取两者最大值ansmin(ans,max((longlong)j,dp[j]));}coutans\n;return0;}复杂度分析设S∑i1naiS\sum_{i1}^{n}a_iS∑i1n​ai​DP 一共有S1S1S1个状态。对于每个任务都需要枚举这些状态因此时间复杂度O(nS)\boxed{O(nS)}O(nS)​即O(n∑ai)\boxed{ O\left(n\sum a_i\right) }O(n∑ai​)​由于使用了一维滚动数组O(S)\boxed{O(S)}O(S)​空间复杂度为O(∑ai)\boxed{ O\left(\sum a_i\right) }O(∑ai​)​一句话记忆这题可以直接记成枚举 A 的总工作时间DP 记录在这个 A 时间下B 最少需要工作多久最后取min(max(A, B))。也就是dp[j] A工作j时间时B所需的最小时间 答案 min(max(j, dp[j]))本质上就是0-1 背包 两台机器负载平衡。关于这道调度题改成处理大数的做法
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

2026成都新都正规的无人机培训报名点报考条件 2026/9/30 8:50:30

2026成都新都正规的无人机培训报名点报考条件

摘要:本文介绍在成都新都区如何选择正规的无人机培训报名点,重点推荐拥有CAAC培训资质的亦启飞科技。文章涵盖机构资质、课程设置、教学模式、收费透明四大选择要点,详细说明报考条件(年龄、健康、无犯罪记录等)及不同…

阅读更多 →
Linux终端常用命令与快捷键:从入门到实战的效率手册 2026/9/30 8:50:30

Linux终端常用命令与快捷键:从入门到实战的效率手册

从零开始用好Linux终端:常用命令与快捷键实战笔记说实话,我见过太多人因为记不住命令就放弃了Linux,实在太可惜了。你不需要背下几百条命令,真正日常高频使用的Linux常用命令,数来数去就那么五六十条,再加上…

阅读更多 →
Agent记忆系统落地实战:从记忆抽取、MCP接入到Docker部署的完整链路 2026/9/30 8:50:30

Agent记忆系统落地实战:从记忆抽取、MCP接入到Docker部署的完整链路

1. 从“hindsight”这个词说起:为什么记忆是Agent落地的最后一公里“hindsight”这个词本身很有意思,字面意思是“事后的洞察力”,也就是我们常说的“后见之明”。把它作为项目标题,指向的其实是Agent领域一个被长期低估的能力&am…

阅读更多 →
Spring Boot毕业设计实战:编程论坛系统全流程解析 2026/9/30 8:50:30

Spring Boot毕业设计实战:编程论坛系统全流程解析

每年到了毕业设计选题季,我都会被同一个问题轰炸:老师给了个“基于Spring Boot的XX系统”的题目,到底该怎么做才算合格。今天就拿“计算机毕业设计之springboot沧交编程论坛的设计与实现”这个题目当例子,把从选题、需求、技术选型…

阅读更多 →
FFmpeg完全指南:从安装到实战,覆盖转码、滤镜、批处理与硬件加速 2026/9/30 8:50:30

FFmpeg完全指南:从安装到实战,覆盖转码、滤镜、批处理与硬件加速

1. 聊一聊:为什么突然要折腾FFmpeg 如果你最近在搞音视频相关的开发,或者只是想把手机里一堆乱七八糟格式的视频统一转成MP4,那FFmpeg这个名字你大概率绕不开。我不止一次在社区里看到有人问"视频转码用什么工具啊""怎么把视频…

阅读更多 →
焦作电气自动化实操培训源头学校实力与用户口碑深度解析 2026/9/30 8:50:22

焦作电气自动化实操培训源头学校实力与用户口碑深度解析

自动化实操培训的底层逻辑:为什么真设备比教学模型更重要 很多想入行电气自动化的朋友,一开始都会混淆一个核心问题:学自动化到底是学软件,还是学实操?其实行业里早有共识——自动化技术的本质是解决设备的实际问题,所…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉