-->
当前位置:首页 > 题库 > 正文内容

程序填空题:求解流水作业调度问题(贪心法)

Luz4年前 (2021-06-19)题库847
有n个作业(编号为1~n)要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi(1≤i≤n)。
流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。可以假定任何作业一旦开始加工,就不允许被中断,直到该作业被完成,即非优先调度。

```c++
#include 
#include  
#include 
using namespace std;
#define N 100
//问题表示
int n;
int a[N];				//对应M1的时间
int b[N];				//对应M2的时间
struct NodeType
{
	int no;							//作业序号
    bool group;						//1代表第一组N1,0代表第二组N2
    int time;						//a,b的最小时间
	bool operator<(const NodeType &s) const
	{
		return timeb[i]对应第0组N2
		c[i].time=a[i]<=b[i]?a[i]:b[i];	//第1组存放a[i],第0组存放b[i]
	}
	sort(c,c+n);						//c元素按time递增排序
	j=0; k=n-1;
	for(i=0;i>n;
    for(int i=0;i>a[i]>>b[i];
	printf("%d\n",solve());
	return 0;
}
```

### 输入格式:

第一行输入作业数n,接着的n行分别为在M1和M2加工各作业所需的时间。

### 输出格式:
输出所需加工时间

### 输入样例1:

```in
4
5 6
12 2
4 14
8 7
```

### 输出样例1:

```out
33
```





答案: 第1空:best[j++]=c[i].no 第2空: best[k--]=c[i].no 第3空:max(f2,f1)+b[best[i]] 第4空:return f2


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。