流水作业调度问题
描述:N个作业{1,2,………,n}要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi,1≤i≤n。流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。可以假定任何任务一旦开始加工,就不允许被中断,直到该任务被完成,即非优先调度。输入:输入包含若干个用例,第一行为一个正整数K(1<=K<=1000),表示用例个数,接下来K个用例,每个用例第一个为作业数N(1<=N<=1000),接下来N行,每行两个非负整数,分别表示在第一台机器和第二台机器上加工时间。输出:每个用例用一行输出采用最优调度所用的总时间,即从第一台机器开始到第二台机器结束的时间。样例输入:145 612 24 148 7样例输出:33算法描述:
1 令N1={i | ai < bi},N2={i | ai>=bi}
2 将n1中作业按ai的非减排序,n2 作业按bi非增排序
3 构成满足Johnson法则的最优调度
#include#include using namespace std;class JOB{public: int key,index; bool job;};bool cmp(JOB a,JOB b){ return a.key >n; while(n--) { cin>>m; for(i=0;i >a[i]; cin>>b[i]; } cout< <
运行结果: