問題描述
給定 n 個作業的集合 j = 。每乙個作業 j[i] 都有兩項任務分別在兩台機器上完成。每乙個作業必須先由機器1 處理,然後由機器2處理。作業 j[i] 需要機器 j 的處理時間為 t[j][i] ,其中i = 1, 2, …, n, j = 1, 2。對於乙個確定的作業 排程,設f[j][i]是作業 i 在機器 j 上的完成處理的時間。所有作 業在機器2上完成處理的時間之和 f = sigma f[2][i] 稱為該作業 排程的完成時間之和。
批處理作業排程問題要求對於給定的 n 個作業,制定最佳作業排程 方案,使其完成時間和達到最小。
tji 機器1 機器2
作業1 2 1
作業2 3 1
作業3 2 3
這3個作業的6種可能的排程方案是1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1;
它們所相應的完成時間和分別是19,18,20,21,19,19。易見,最佳排程方案是1,3,2,其完成時間和為18。
以1,2,3為例:
作業1在機器1上完成的時間為2,在機器2上完成的時間為3
作業2在機器1上完成的時間為5,在機器2上完成的時間為6
作業3在機器1上完成的時間為7,在機器2上完成的時間為10
3+6+10=19,所以是19
1,3,2
作業1在機器1上完成的時間為2, 在機器2上完成的時間為3
作業3在機器1上完成的時間為4,在機器2上完成的時間為7
作業2在機器1上完成的時間為7,在機器2上完成的時間為8
3+7+8=18,所以時間和為18
思路:1 就是用回溯算出所有的狀態。當然可以剪一下值,就是當前算出來的值大於目標時,就不用再繼續了。我是直接列舉全排列算的。排列樹?? qwq 不太清楚。
第二個用的廣搜寫的。其實用佇列也行,用優先佇列沒有啥必要。。
只是為了熟悉一下。
還有乙個地方,那就是這個如果要加狀態的時候,還要學習第乙個加乙個vector,我沒有加。
#include
using
namespace
std;
/* 用優先佇列搞一下。但是這樣寫狀態有點多。。
用位運算寫,比較方便。但是只能表示64個機器。注意!
分支限界qwq
*/typedef
long
long ll;
const
int maxn=1e5;
struct ednode[maxn];
struct node
friend
bool
operator
<(node a,node b)
};priority_queueq;
int main()
ll ans=1e17;
while(!q.empty())
for(int i=0;iif((u.status&(1
<0)}}
printf("%lld\n",ans);
}return
0;}
#include
using
namespace
std;
typedef
long
long ll;
/* 批處理作業排程。
記錄乙個結尾時間。
這樣寫不方便剪枝。可以把vector傳參傳過去。
dfs。
*/const
int maxn=1e5;
ll ans;
ll sum[maxn];
bool vis[maxn];
vector
v;vector
vv;int m;
struct nodenode[maxn];
int siz;
void dfs(int x)
for(int i=0;icout
all)
for(int i=1;i<=m;i++)
}return ;
}int main()
dfs(0);
printf("最後的結果qwq\n");
for(int i=0;iif(i==0)
printf("%d",vv[i]);
else
printf(" %d",vv[i]);
}puts("");
printf("%lld\n",ans);
}return
0;}
回溯法 批處理作業排程 回溯演算法 批處理作業排程
成為該作業排程的完成時間和。批處理作業排程問題要求對於給定的 n個作業 制定乙個最佳的作業排程方案 使其完成時間和達到最小。批處理作業排程問題的乙個常見例子是在計算機系統中完成一批 n個作業,每個作業都要完成先計算,然 後將計算機結果列印輸出這兩項任務 計算任務由計算機的 處理器完成 列印輸出任務由...
回溯法 批處理作業排程 回溯法 批處理作業排程
問題描述 給定n個作業的集合j j1,j2,jn 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f f2i,稱為該...
批處理作業排程(回溯)
一 題目描述 給定n個作業的集合j j1,j2,jn 每個作業j都有兩項任務分別在兩台機器上完成。每個作業必須先由機器1處理,再由機器2處理。作業i需要機器j的處理時間為tji i 1,2,n j 1,2 對於乙個確定的作業排程,設fji是作業i在機器j上完成處理的時間,則所有作業在機器2上完成處理...