流水作业调度问题要求确定这 n 个作业的最优加工顺序,使得从第一个作业在机器 M1 上开始加工,到最后一个作业在机器 M2 上加工完成所需的时间最少。可以假定任何作业一旦开始加工,就不允许被中断,直到该作业被完成。
结论是:
贪心策略: 对于给定的作业,在M1上的加工时间为a,在M2上的加工时间为b。 当a≤b时,让a比较小的作业先执行 ;当a>b时, 让b比较小的尽可能后执行
部分代码:
//定义一个结构体
struct NodeType{
int no;
bool group;
int time;
bool operator<(const NodeType &s)const{
return time<s.time;
}
};
int solve(){
int i,j,k;
NodeType c[N];
for(i=0;i<N;i++){
c[i].no=i;
c[i].group=(a[i]<=b[i]);
c[i].time=a[i]<=b[i]?a[i]:b[i];
}
sort(c,c+N);
j=0;k=N-1;
for(i=0;i<N;i++){
if(c[i].group==1)
best[j++]=c[i].no;
else
best[k--]=c[i].no;
}
int T1=0;
int T2=0;
for(i=0;i<N;i++){
···
}
for(int ii=0;ii<N;ii++){
cout<<best[ii]+1<<" ";
}
return T2;
}