c++写贪心算法的多机调度问题
时间: 2023-11-20 16:56:04 浏览: 103
多机调度问题 -贪心法——C++代码
以下是C++实现贪心算法的多机调度问题的代码和解释:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
struct Job {
int id, time;
bool operator < (const Job& j) const {
return time > j.time; // 按处理时间从大到小排序
}
} jobs[MAXN];
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> jobs[i].time;
jobs[i].id = i;
}
sort(jobs + 1, jobs + n + 1); // 按处理时间从大到小排序
int ans = 0;
for (int i = 1; i <= n; i++) {
int j = 1;
while (j <= m && i + j - 1 <= n) { // 将作业分配给处理时间最短的机器
ans += jobs[i + j - 1].time;
j++;
}
i += j - 2;
}
cout << ans << endl;
return 0;
}
```
解释:
1. 定义结构体`Job`,包含作业编号`id`和处理时间`time`,并重载小于号运算符,按处理时间从大到小排序。
2. 读入作业数量`n`和机器数量`m`,并读入每个作业的处理时间。
3. 对所有作业按处理时间从大到小排序。
4. 从第一个作业开始,将作业分配给处理时间最短的机器,直到所有作业都被分配完毕。
5. 输出总处理时间。
阅读全文