news 2026/7/25 13:28:15

C++算法:连续时间+多任务并行(二分)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++算法:连续时间+多任务并行(二分)

🍗 炸鸡排问题(连续时间并行调度)
一、题目本质

有 n 个任务(鸡排),第 i 个任务需要 t[i] 的总处理时间,同时最多(且必须)处理 k 个任务,任务可随时切换,但完成的任务不能再占用资源
求:最多能持续运行多长时间

👉 本质是:
连续时间 + 必须恰好 k 个并行任务的调度问题

二、关键建模思想

把炸锅看成一个“资源池”:每 1 秒,炸锅消耗 k 单位工作量,第 i 个鸡排最多能提供 t[i] 单位工作量,在 T 秒内,第 i 个鸡排最多贡献min(t[i], T)

三、核心可行性条件(最重要)

炸锅能持续 T 秒 当且仅当:∑min(ai​,T)≥kT

含义解释

左边:所有鸡排在 T 秒内最多能提供的炸制时间

右边:炸锅在 T 秒内必须消耗的炸制时间

四、通用结论(可迁移)

所有:
1.连续时间
2.多任务可切换
3.必须同时运行 k 个任务

都可以尝试:∑min(ai​,T)≥kT进行二分判断

五、题目

PG:炸鸡排

浮点数二分:当答案为浮点数时,二分终止条件不再是left>right,而是用一个较大的二分次数来限制。

intN=100;while(N--){doubleT=(left+right)*1.0/2;// 验证doublecnt=0;for(doubletime:t){cnt+=min(time,T);}if(cnt>=k*T){left=T;}else{right=T;}}

LeetCode:同时运行N台电脑

答案为整型的开区间二分:判断条件为left+1<right,从而保证区间内一定包含整数,否则返回left

longlongmaxRunTime(intn,vector<int>&batteries){longlongleft=0;longlongright=0;for(intt:batteries){right+=t;}right/=n;right+=1;while(left+1<right){longlongmid=(left+right)/2;longlongcnt=0;for(longlongt:batteries){cnt+=min(t,mid);}if(cnt>=mid*n){left=mid;}else{right=mid;}}returnleft;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 7:02:48

DVWA -SQL Injection-通关教程-完结

DVWA -SQL Injection-通关教程-完结 SQL注入是一种攻击者通过在应用程序的输入字段中插入恶意SQL代码&#xff0c;从而操纵后端数据库查询的攻击技术。如果应用程序未对用户输入进行适当过滤&#xff0c;这些恶意SQL代码会被数据库执行&#xff0c;导致数据泄露、篡改或破坏。 …

作者头像 李华
网站建设 2026/7/21 17:09:12

0x3f第七天 二叉搜索树

1.前序遍历&#xff1a;4213657先验证根是否满足大于左子树最大值&#xff0c;小于右子树最小值遍历左子树&#xff08;更新右值&#xff09;遍历右子树&#xff08;更新左值&#xff09;对于最大值和最小值&#xff0c;可以直接在函数里加上def isValidBST(self, root: Option…

作者头像 李华
网站建设 2026/7/22 11:42:41

扩容U盘,资料毁灭盘

早就听过扩容盘了&#xff0c;没想到也发生在我身上。原本上面是印着长城的 &#xff0c;但现在掉漆了。店铺现在这个商品下架了&#xff0c;但店铺是有品牌认证的这个U盘也算是用了将近4年了&#xff0c;存的都是大学的上课的作业。大四没课回家了几个月没有使用过这个U盘&…

作者头像 李华
网站建设 2026/7/24 11:27:31

数据结构学习篇(5)---顺序表和链表的区别

对于顺序表和链表的异同&#xff0c;上面这个表格直观展示了两者的不同之处&#xff0c;有几点可以做一下解释&#xff1a;顺序表和链表在逻辑结构上都是连续的&#xff0c;但是在物理结构&#xff0c;也就是存储空间上&#xff0c;顺序表是连续的&#xff0c;因为他的本质是数…

作者头像 李华