某工厂有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
解题思路:(贪心算法)
采用最长处理时间作业优先的贪心算则策略设计出解多机调度问题的较好的近似算法。
1.当n<=m时,只要将作业时间区间分配给作业即可。时间为最长时间的作业。
2.当n>m时,首先将n个作业从大到小排序。然后依此顺序分步将作业分配给空闲的处理机,每步分配给一个机器,而且需要考虑分配哪一个作业。根据这种思想可利用如下贪心原则:从剩下的作业中,选择需要处理时间最长。然后依次选择处理时间次长的作业,直到所有的作业全部处理完毕,或者机器不能再处理其他作业。
代码如下: