题目:
n个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。
流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1010;
struct node
{
int min_cost,index;
bool flag;
};
node d[MAXN];
bool cmp(node a,node b)
{
return a.min_cost<b.min_cost;
}
int main()
{
int n,a[MAXN],b[MAXN],bq[MAXN];
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
d[i].min_cost=min(a[i],b[i]);
d[i].index=i;
d[i].flag=a[i]<b[i];
}
sort(d+1,d+1+n,cmp);
int head=1,tail=n;
for(int i=1;i<=n;i++)
if(d[i].flag) bq[head++]=d[i].index;
else bq[tail--]=d[i].index;
int k,t;
k=a[bq[1]];
t=k+b[bq[1]];
for(int i=2;i<=n;i++)
{
k+=a[bq[i]];
t=k<t?(t+b[bq[i]]):(k+b[bq[i]]);
}
for(int i=1;i<=n;i++) cout<<bq[i]<<" ";
cout<<endl<<t<<endl;
return 0;
}
测试数据:
6
2 5
7 3
6 2
4 7
6 9
8 2
输出:
1 4 5 2 6 3
35
流水作业调度优化与算法实现
本文探讨了在由两台机器M1和M2组成的流水线上,如何优化n个作业的加工顺序,以最小化从开始到结束的总加工时间。通过给出的代码示例,展示了具体的调度策略,输出的作业顺序表明了这种策略如何降低整体完成时间。
4975

被折叠的 条评论
为什么被折叠?



