问题描述
设有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; }