#include <iostream>
#include <algorithm>
#define N 1001
using namespace std;
int n,m,a[N],b[N];
int indexMin(int b[],int m) //找到当前处于空闲的机器
{ int t=0,min=b[0];//最初默认下标为0的机器空闲
for(int i=1;i<m;i++)
if(b[i]<min)
min=b[i],t=i;
return t;
}
void Greedy(int a[],int b[],int n,int m)
{ if(n<=m)
{ cout<<"为每个作业分配一台机器."<<endl;
return ;
}
int i=0,j=0;
sort(a,a+n,greater<int>());//把作业按照处理时间从大到小排序
while(i<n)
{ if(j<m)//先按序分配给机器
b[j++]=a[i++];
else//每次找到空闲的机器分配作业
{ int x=indexMin(b,m);
b[x]+=a[i++];
}
}
}
int main()
{ cin>>n;//作业的个数
cin>>m;//机器的个数
for(int i=0;i<n;i++)
cin>>a[i];
Greedy(a,b,n,m);
for(int i=0;i<m;i++)
cout<< b[i]<< " ";//输出各个机器运转了多长时间
return 0;
}
多机调度
最新推荐文章于 2021-06-17 17:58:09 发布