c++输出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。
时间: 2024-02-22 13:56:10 浏览: 29
这是一个经典的作业调度问题,可以使用贪心算法来解决。具体的解决方法如下:
1. 将n个作业按照其所需的处理时间从大到小排序。
2. 创建一个长度为m的数组machines,用来记录每台机器的完成时间。
3. 对于每个作业,将其分配给完成时间最早的机器,并将该机器的完成时间更新为加上当前作业所需的处理时间。
4. 重复步骤3,直到所有作业都被分配完成。
5. 输出每台机器的完成时间中的最大值,即为所求的最短时间。
以下是c++代码实现:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
int n, m, machines[MAXN];
bool cmp(int a, int b){
return a > b;
}
int main(){
cin >> n >> m;
for(int i = 0; i < n; i++){
cin >> machines[i];
}
sort(machines, machines + n, cmp);
for(int i = 0; i < n; i++){
int index = 0;
for(int j = 1; j < m; j++){
if(machines[j] < machines[index]){
index = j;
}
}
machines[index] += machines[i];
}
int max_time = 0;
for(int i = 0; i < m; i++){
if(machines[i] > max_time){
max_time = machines[i];
}
}
cout << max_time << endl;
return 0;
}
```
注意:这里的实现假设每个作业的处理时间已知,如果需要估计作业的处理时间,可以使用机器学习算法来预测。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)