C++ 复制书稿

该博客探讨了一个关于如何在k台可并行工作的机器上最优地分配n个任务的问题,使得总完成时间最短。每个任务的执行时间不同,且分配给同一机器的任务必须是连续的。解决方案采用动态规划和贪心策略,动态规划求得最短时间,然后通过贪心算法确定具体任务分配。题目给出了输入输出样例和数据范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题描述】

假设有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为ti。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。

现在要求分配给一个机器的任务必须是连续的,比如不能把1、3、4号任务分配给同一个机器。

现在请你设计一种方案,使得完成所有任务的时间最短。完成任务的时间取决于耗时最长的那台机器。

【输入】

第一行两个整数n,k;

第二行n个整数,第i个整数表示第i个任务所需要的时间ti。

【输出】

共k行,每行两个整数,第i行表示第i个机器分配的任务的起始编号和终止编号。K行的起始编号应该从小到达排列,如果有多解,则尽可能让前面的人少抄写。

【输入输出样例】

machine.in

machine.out

9 3

1 2 3 4 5 6 7 8 9

1 5

6 7

8 9

【数据范围】

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

对于100%的数据,k≤n≤500。

 

 

本题可以使用动态规划解决,设f(i,j)为当前j本书交由i个人抄写,需要的最短时间,则动态转移方程为 f(i,j)=max(f[i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值