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

程序填空题:求解多机调度问题(贪心法)

Luz4年前 (2021-05-10)题库696
设有n个独立的作业{1,2,…,n},由m台相同的机器{1,2, …,m}进行加工处理,作业i所需的处理时间为ti(1≤i≤n),每个作业均可在任何一台机器上加工处理,但未完工前不允许中断,任何作业也不能拆分成更小的子作业。
多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。
```c++
#include
#include
#include
#include
#include
using namespace std;
#define N 100
//问题表示
int n;
int m;
struct NodeType
{
int no; //作业序号
int t; //执行时间
int mno; //机器序号
bool operator<(const NodeType &s) const
{ return t>s.t; } //按t越小越优先出队
};
struct NodeType A[N];
void solve() //求解多机调度问题
{
NodeType e;
if (n<=m)
return;
sort(A,A+n);
priority_queue qu; //小根堆
for (int i=0;i {
A[i].mno=i+1;
printf("%d %d %d %d-%d\n",
A[i].mno,A[i].no,A[i].t,0,A[i].t);
qu.push(A[i]);
}
for (int j=m;j {
;
;
printf("%d %d %d %d-%d\n",
e.mno,A[j].no,A[j].t,e.t,e.t+A[j].t);
;
;
}
}
int main()
{
cin>>n>>m;
for(int i=0;i cin>>A[i].no>>A[i].t;
solve();
return 0;
}
```
### 输入格式:
第一行输入作业数n和机器数m,接着的n行中输入每个作业的编号和所需处理时长。

### 输出格式:
输出n行,每行输出机器编号、作业号、执行时间、占用时间段

### 输入样例1:

```in
7 3
1 2
2 14
3 4
4 16
5 6
6 5
7 3
```

### 输出样例1:

```out
1 4 16 0-16
2 2 14 0-14
3 5 6 0-6
3 6 5 6-11
3 3 4 11-15
2 7 3 14-17
3 1 2 15-17
```






答案:
第1空:e=qu.top()

第2空:qu.pop()

第3空:e.t=e.t+A[j].t

第4空:qu.push(e)

发表评论

访客

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