2.最佳調度問題
阿新 • • 發佈:2017-10-07
ios int ans stdin 時間 code ring 設計 nbsp
2.最佳調度問題
(machine.pas/c/cpp)
【問題描述】
假設有n個任務由k個可並行工作的機器完成。完成任務i需要的時間為ti。試設計一個算法找出完成這n個任務的最佳調度,使得完成全部任務的時間最早。
【編程任務】
對任意給定的整數n(<=20)和k(<=10),以及完成任務i需要的時間為ti,i=1~n。編程計算完成這n個任務的最佳調度。
【輸入格式】
由文件machine.in給出輸入數據。第一行有2 個正整數n和k。第2 行的n個正整數(<=10000)是完成n個任務需要的時間。
【輸出格式】
將計算出的完成全部任務的最早時間輸出到文件machine.out。
【輸入樣例】
7 3
2 14 4 16 6 5 3
【輸出樣例】
17
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[25],b[15],ans; int n,k; bool cmp1(int a,int b) { return a>b; } int greedy(){ sort(a+1,a+1+n,cmp1); for(int j=1;j<=n;j++) { b[1]+=a[j]; sort(b+1,b+1+k); } return ans=b[k]; } void dfs(int s,int t) { if(t>=ans)return; if(s>n){ ans=min(ans,t);return; } for(int i=1;i<=k;i++) { b[i]+=a[s]; dfs(s+1,max(b[i],t)); b[i]-=a[s]; } } int main() { freopen("machine.in","r",stdin); freopen("machine.out","w",stdout); cin>>n>>k; for(int i=1;i<=n;i++)cin>>a[i]; greedy(); memset(b,0,sizeof(b)); dfs(1,0); cout<<ans<<endl; }
2.最佳調度問題