您的位置:首页 > 其它

流水线作业调度问题

2013-06-02 17:25 441 查看
题目:

感觉有些 , 还要思考的地方 , 留下了 ,以后看。。。。

Description

N个作业{1,2,………,n}要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi,1≤i≤n。

流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。

Input

输入包括若干测试用例,每个用例输入格式为:

第1行 一个整数代表任务数n,当为0时表示结束,或者输入到文件结束(EOF)

第2行至第n+1行每行2个整数,代表任务在M1,M2上所需要的时间

Output

输出一个整数,代表执行n个任务的最短时间

Sample Input
OriginalTransformed
1
1 2
0


Sample Output
OriginalTransformed
3


#include<stdio.h>
#include<stdlib.h>
struct node
{
int m1,m2;
};
struct node time[2][20000];
int cmp1(const void *p1,const void *p2)
{
return ( (*(struct node *)p1).m1>(*(struct node *)p2).m1? 1:-1);
}
int cmp2(const void *p1,const void *p2)
{
return ( (*(struct node *)p1).m2>(*(struct node *)p2).m2? -1:1 );
}
int main()
{
int n,i,a,b,q,p,time1,time2;
while(scanf("%d",&n)!=EOF&&n)
{
q=p=0;
time1=time2=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
if(b>=a)
{
time[0][q].m1=a;
time[0][q++].m2=b;
}
else{
time[1][p].m1=a;
time[1][p++].m2=b;
}
}
qsort(time[0],q,sizeof(time[0][0]),cmp1);//m1  降序
qsort(time[1],p,sizeof(time[1][0]),cmp2);//m2 升序
for(i=0;i<q;i++)
{
time1+=time[0][i].m1;
if(time2<time1)
time2=time1;
time2+=time[0][i].m2;
}
for(i=0;i<p;i++)
{
time1+=time[1][i].m1;
if(time2<time1)
time2=time1;
time2+=time[1][i].m2;
}
printf("%d\n",time2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: