#P954. 工件调度
工件调度
【问题描述】
Jam的工厂新进了一批货,需要赶紧加工,工厂有许多加工机器,对于这些货物来说是绰绰有余了,但是他想合理安排加工方式,使每个加工机器都被充分利用。
举个例子
他希望工件在8小时内加工完成,已知这里有5个工件,按顺序,需要消耗的时间依次为:5 2 4 4 3 即5个工件要在8小时内完工,当然,你可以调度它们分别在5台加工机器上完成,但是每台机器就依次有:3 6 4 4 5 小时是空闲的,那么机器的加工利用率就很低了,这里我们用他们剩余时间的平方和代表你调度的加工利用率,即:3^2+6^2+4^2+4^2+5^2=102
当然,Jam希望这个值越小越好,这样才能使机器被充分利用
另外 同一个机器加工完一个工件后需要休息一个小时!工件的加工是按输入所给定的顺序的。那么对于题目来说 最佳的调度方案就是
]
它的效率为:3^2+1^2+0^2=10
请注意:
1.加工的顺序是给定的不能把后面的工件拿到前面去加工,如图中的2和3不能调换位置,只能依次按给定的顺序调度.这一点请引起注意!
2.休息时间为1小时,对于这个例子,如果Jam要求在7个小时内完成,则5号工件就必须在另一个机器上完成了,当然,题目保证Jam要求的时间一定比消耗最长时间的工件要长,否则就无解了.....
3.你可以视机器的数量是无限的,对于一个调度,你想要几个机器加工都可以,只要总效率最高,也就是效率值最小
4.任何工件都应该向前安排,只能在工件完成后才留出空闲时间,这一点,图中也有体现
【输入文件】(work.in)
输入文件的第一行分别是Jam要求完工的时间和工件的数量
第二行分别为一号工件所需时间,二号工件所需时间...输入顺序就是给定顺序
【输出文件】(work.out)
输出文件为两行,第一行为最小的效率值,第二行至以下为调度方案
【输入样例】
8 5
5 2 4 4 3
【输出样例】
10
5
2 4
4 3
【注释】
输出的方案应使工件尽量向前调度,比如 对于输入
8 3
5 2 5
输出应该为
9
5 2
5
而不是
9
5
2 5
便于大家理解,这里在给几个调度方案,但是他们显然不是最优的,只有上面的那种调度方案才是最优的
这种调度的效率为: 0^2+4^2+0^2=16
这种调度的效率为: 0^2+4^2+4^2+5^2=57
【数据规模】
对于40%的数据有:工件数量<10 Jam要求时间<30
对于100%的数据有:工件数量<500 Jam要求时间<30000
数据保证效率值在长整型范围内