P1476 加工生产调度

474 阅读1分钟

image.png

image.png

image.png

流水作业调度问题要求确定这 n 个作业的最优加工顺序,使得从第一个作业在机器 M1 上开始加工,到最后一个作业在机器 M2 上加工完成所需的时间最少。可以假定任何作业一旦开始加工,就不允许被中断,直到该作业被完成。

结论是:  贪心策略: 对于给定的作业,在M1上的加工时间为a,在M2上的加工时间为b。 当a≤b时,让a比较小的作业先执行 ;当a>b时, 让b比较小的尽可能后执行

image.png

image.png

image.png

image.png

部分代码:

//定义一个结构体
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;
}