问题描述 车间有m(m>0)台机床,可同时加工工件,但同一台机床不能同时加工多个工件。今有n(n>0)个工件,加工不同工件所花费的时间有差异。各工件可以在任何一台机床上加工。同一工件在不同机床上加工,花费的时间相同。一台机床加工完一个工件后可以立刻加工下一个工件,换工件的时间忽略不计。请找出最优分派方案,使得加工完所有工件所花费的时间最短。 比如,有两台机床、7个工件,各工件加工时间分别为:903 529 117 1634 249 685 141 最佳分派如下: 在第1台机床上加工3个工件:903+529+685=2117在第2台机床上加工剩下的工件:117+1634+249+141=2141在2141个单位时间后两台机床停止工作,加工完成。输入格式 输入的第1行是两个正整数,分别表示m和n的值。第2行有n个正整数,表示加工第i(i=1,2...,n)个工件需要花费的时间。 输出格式先输出m 行,第i(i=1,2,..,m)行用空格分隔若干个整数,表示哪些工件在第i台机床上加工。最后还要输出1个整数,表示加工所有工件需要花费多少时间。
时间: 2023-06-02 17:06:54 浏览: 155
抱歉,我可以回答这个问题。这是一个经典的作业调度问题,可以使用贪心算法来求解。具体而言,我们可以将工件按照加工时间从大到小排序,然后依次将每个工件分配给当前加工时间最短的机床,直到所有工件都被分配完成。以下是具体的算法描述:
1. 将工件按照加工时间从大到小排序。
2. 初始化m个机床的加工时间为0。
3. 依次遍历每个工件,将其分配给当前加工时间最短的机床,并更新该机床的加工时间。
4. 输出每个机床上加工的工件以及加工花费的时间总和。
对于输入样例,最优的分派方案是:
第1台机床:903 529 685,加工时间为2117
第2台机床:117 1634 249 141,加工时间为2141
所有工件的加工总时间为2117+2141=4258
因此,输出为:
903 529 685
117 1634 249 141
4258
相关问题
车间有m(m>0)台机床,可同时加工工件,但同一台机床不能同时加工多个工件。今有n(n>0)个工件,加工不同工件所花费的时间有差异。各工件可以在任何一台机床上加工。同一工件在不同机床上加工,花费的时间相同。一台机床加工完一个工件后可以立刻加工下一个工件,换工件的时间忽略不计。请找出最优分派方案,使得加工完所有工件所花费的时间最短。
这是一个典型的作业调度问题,可以使用贪心算法——贪心策略为尽量让每一台机床尽量均匀地分配工件,即让每台机床加工的工件时间尽量相近。具体实现可以按照以下步骤进行:
1. 将所有工件按照加工时间从长到短排序。
2. 初始化m个时间为0的机床数组。
3. 遍历所有工件,对于每个工件,选择当前时间最短的一台机床加工,将此工件安排到该机床上并更新该机床的加工时间。
4. 返回所有机床中加工时间最长的一台机床的加工时间,即为最优分派方案的总时间。
注意:如果有多个工件具有相同的加工时间,可以按照任意顺序优先考虑。
c ++ 车间有m(m>0)台机床,可同时加工工件,但同一台机床不能同时加工多个工件。今有n(n>0)个工件,加工不同工件所花费的时间有差异。各工件可以在任何一台机床上加工。同一工件在不同机床上加工,花费的时间相同。一台机床加工完一个工件后可以立刻加工下一个工件,换工件的时间忽略不计。请找出最优分派方案,使得加工完所有工件所花费的时间最短。
这是一个运筹学问题,属于技术领域,我可以尝试回答。这个问题可以使用贪心算法来求解。首先,将所有的工件按照所需时间从大到小排列。接着,依次将每个工件分配给加工时间最短的机床。如果有多个加工时间最短的机床可供选择,就选择编号最小的机床。重复以上过程,直到所有的工件都被分配完毕。这种贪心策略可以保证在给定的机床数目下得到全局最优解。
阅读全文