最佳調度問題_分支限界法


最佳調度問題
【問題描述】
       假設有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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM