#include <iostream>
#include <algorithm>
using namespace std;
int main(){
cout<<"请输入总的机器数目:";
int m,n;//m代表总的机器数目
cin>>m;
cout<<"请输入有多少个任务:";
cin>>n;//n表示任务个数
cout<<"请输入各任务所需时间:";
int Duty[n]={};//用于保存各任务完成所需时间
for(int i=0;i<n;i++){
cin>>Duty[i];
}
int Run[m]={};//用于记录各台机器运行的时间
sort(Duty,Duty+n);
if(m>=n){
cout<<"最短时间为:"<<Duty[n-1]<<endl;
}else{
for(int i=0;i<m;i++){
Run[i]=Duty[n-i-1];
}
int s=n;
while(m<s){
sort(Run,Run+m);
Run[0]=Run[0]+Duty[s-m-1];
s--;
}
sort(Run,Run+m);
cout<<"最短时间是:"<<Run[m-1]<<endl;
}
return 0;
}
算法的思想是先对任务时长排序,之后每次选最长时间加入,求出来的不一定是最优解,但是是次优秀解。
算法时间复杂度很垃圾,以后看情况优化下。运行结果如下: