流水作业调度问题

来源:互联网 发布:数据分析工程师笔试题 编辑:程序博客网 时间:2024/06/01 10:29

流水作业调度问题

        n个作业{0,1,2,…,n}2台机器上M1M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,后在M2上加工。在两台机器上加工的时间分别为aibi


解:

流水作业调度:
根据Johnson法则
使用结构体数组f1[j] 存放a[i]<b[i]的作业
使用结构体数组f2[k] 存放a[i]>=b[i]的作业
对f1[j]根据a[j]进行升序排列 
对f2[k]根据b[k]进行降序排列。
遍历两个结构体数组,依次求时间
取两个机器运行时间的较大值作为作业用时。 

#include <stdio.h>#include <algorithm>using namespace std;struct node{int a,b;};bool cmp1(node p,node q){return p.a<q.a;}bool cmp2(node p,node q){return p.b>q.b;}int main(){int a[100],b[100];int n; node f1[100];node f2[100];scanf("%d",&n);int i,j,k; for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n;i++){scanf("%d",&b[i]);}for(i=0,j=0,k=0;i<n;i++){if(a[i]<b[i]){//a[i]<b[i]放到f1[j]中f1[j].a=a[i];f1[j].b=b[i];j++;}else{//a[i]>=b[i]放到f2[k]中 f2[k].a=a[i];f2[k].b=b[i];k++;}}sort(f1,f1+j,cmp1);//升序 sort(f2,f2+k,cmp2);//降序 int first=0;//机器a作业 int secend=0;//机器b作业 for(i=0;i<j;i++){first+=f1[i].a;secend=(first>secend?first:secend)+f1[i].b;//两个机器作业取大值 }for(i=0;i<k;i++){first+=f2[i].a;secend=(first>secend?first:secend)+f2[i].b;}printf("%d\n",secend);}



0 0
原创粉丝点击