贪心算法---多机调度问题
作者:互联网
问题描述
设有n个独立的作业{1,2,…,n},有m台相同的机器进行加工处理。作业i所需的处理时间为ti。现约定,任何作业可以在任何一台机器上加工处理,但未完工前不允许中断处理,任何作业不能拆分成更小的子作业。
例如,设7个独立作业{1,2,3,4,5,6,7}由3台机器M1、M2和M3来加工处理。各作业所需的处理时间分别为{2,14,4,16,6,5,3}。所需的加工时间为17
多机调度问题要将所需时间从大到小排序
#include<iostream>
using namespace std;
//从大到小排序
void Sort(int*a,int n){
int i,j,t;
for(i=0;i<n;i++){
int max=i;
for(j=i;j<n;j++){
if(a[max]<a[j]){
max=j;
}
}
t=a[i];
a[i]=a[max];
a[max]=t;
}
}
//从小到大排序
void SortMin(int*a,int n){
int i,j,t;
for(i=0;i<n;i++){
int min=i;
for(j=i;j<n;j++){
if(a[min]>a[j]){
min=j;
}
}
t=a[i];
a[i]=a[min];
a[min]=t;
}
}
int main(void){
int i,k,n;
cin>>n>>k;
int *a;
a=new int[n];
for(i=0;i<n;i++){
cin>>a[i];
}
int *s;
s= new int[k];
Sort(a,n);
// for(i=0;i<n;i++){
// cout<<a[i]<<" ";
// }
// cout<<endl;
int t,j=0,w=0;
for(i=0;i<k;i++,j++){
s[i]=a[j];
w=w+s[i];
}
t=a[0];
j=j-1;
while(j<n-1){
Sort(s,k);
// for(i=0;i<k;i++){
// cout<<s[i]<<" ";
// }
// cout<<endl;
j=j+1;
s[k-1]=s[k-1]+a[j];
w=w+a[j];
if(s[k-1]>t){
t=s[k-1];
// w=w+t-a[j];
// cout<<t<<endl;
}
}
cout<<t<<endl;
// cout<<w/n<<endl;
delete a;
delete s;
}
标签:Sort,min,int,max,void,作业,---,多机,贪心 来源: https://blog.csdn.net/m0_52339405/article/details/120981911