最佳調度問題
【問題描述】
假設有n個任務由k個可並行工作的機器完成。完成任務i需要的時間為ti。試設計一個算法找出完成這n個任務的最佳調度,使得完成全部任務的時間最早。
【編程任務】
對任意給定的整數n和k,以及完成任務i需要的時間為ti,i=1~n。編程計算完成這n個任務的最佳調度。
【輸入樣例】
7 3
2 14 4 16 6 5 3
【輸出樣例】
17
即此問題為七個任務,三台機器。
首先列個七乘三的二維數組了解算法思路:

我們知道回溯法其實是窮舉法加剪枝函數,我們的函數用到遞歸,層層返回。一共七層,每層的除去葉子節點都有三個孩子
每搜索到葉子節點就更新一次maxnum值(小於maxnum則更新)(初值為一個較大的數),是用一次搜索結束后三個機器中花費時間最長的機器的所用時間作為此次分配的所用時間,。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,k; 4 int x[100];//機器 5 int x1[100];//作業 6 int maxnum=1000000; 7 8 void task(int level) 9 { 10 if(level>n){ 11 int temp=0; 12 for(int i=1;i<=k;i++){ 13 if(x[i]>temp){ 14 temp=x[i]; 15 } 16 } 17 if(temp<maxnum){ 18 maxnum=temp; 19 } 20 } 21 else{ 22 for(int i=1;i<=k;i++){ 23 x[i]+=x1[level]; 24 task(level+1); 25 x[i]-=x1[level]; 26 } 27 } 28 } 29 int main() 30 { 31 cin >> n; 32 cin >> k; 33 for(int i=1;i<=n;i++){ 34 cin >>x1[i]; 35 } 36 task(1); 37 cout << maxnum; 38 return 0; 39 }

