博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(贪心)多机调度问题
阅读量:6998 次
发布时间:2019-06-27

本文共 1012 字,大约阅读时间需要 3 分钟。

某工厂有n个独立的作业,由m台相同的机器进行加工处理。作业i所需的加工时间为ti,任何作业在被处理时不能中断,也不能进行拆分处理。现厂长请你给他写一个程序:算出n个作业由m台机器加工处理的最短时间。

 输入

第一行T(1<T<100)表示有T组数据。每组测试数据的第一行分别是整数n,m(1<=n<=10000,1<=m<=100),接下来的一行是n个整数ti(1<=t<=100)。

输出

所需的最短时间

样例输入

2

2 2

1 5

6 3

2 5 13 15 16 20

样例输出

5

28

这并不是一道oj上的题目,反正我是没找到。。。

应该属于一类题目。

解题思路就是贪心的思想。

我们现将所有的时间排序。

第一种情况:n<=m    时间最长的工作就是我们需要求解的总时间。

第二种情况:n>m    

这时候我们就将m个机器分配给前m个时间最长的工作,直到有机器空闲下来,我们将闲下的机器继续向后分配。直到分配到没有工作可做了。当前的时间再加上还没有做完的工作的最长时间就是我们所要求的总时间。

代码:

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 int a[1005],b[1005]; 7 bool cmp(int a,int b){ 8 return a>b; 9 }10 int main(){11 int n,m;12 int T;13 cin>>T;14 while(T--){15 int n,m;16 cin>>n>>m;17 for(int i=0;i
b[i])42 mx=max(mx,a[i]-b[i]); //找出还没做完的工作的最长时间43 }44 cout<
<

 

转载于:https://www.cnblogs.com/ISGuXing/p/7308900.html

你可能感兴趣的文章
Hystrix快速入门
查看>>
十大励志电影
查看>>
在Sql语句中使用正则表达式来查找你所要的字符
查看>>
18种最实用的网站推广方法大全
查看>>
浅谈C/C++中的typedef和#define
查看>>
浅谈C/C++中的指针和数组(一)
查看>>
这该死的数字化生活
查看>>
matlab练习程序(圆柱投影)
查看>>
需要谨记的产品设计原则
查看>>
checkbox实现单选多选
查看>>
billing是如何的拆分的?
查看>>
Lua 迭代器与closure
查看>>
mybatis_helloworld(2)_源码
查看>>
完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
查看>>
BLE 广播数据解析
查看>>
Oracle用户密码过期和用户被锁解决方法【转】
查看>>
Android 解决Android的TextView和EditText换行问题
查看>>
CSS效果集锦(持续更新中)
查看>>
通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[中]:管道如何处理请求...
查看>>
Eigen教程(9)
查看>>