有n個作業要在兩台機器m1和m2組成的流水線上完成加工。每個作業i 都必須先花時間ai 在m1上加工,然後花時間bi 在m2上加工。
求解n個作業的加工順序,使得總的加工時間最短。
最優排程: 讓m1沒有空閒, m2的空閒時間盡量短。
設s1 為 a < b的作業集合,s2為 a >= b 的作業集合,將s1的作業按a 遞增序排序,s2 中的作業按照b 遞減序排序,則最優順序為 s1(排序後) + s2(排序後)
加工生產排程
某工廠收到了n個產品的訂單,這n個產品分別需用a,b兩台工具機加工,並且必須先在a工具機加工後才可以送到b工具機加工。
某個產品i在a,b兩工具機加工的時間分別為ai,bi。怎樣安排這n個產品的加工順序,才能使總的加工時間最短?這裡所說的加工時間是指:從開始加工第乙個產品到所有的產品都已在a,b兩台工具機加工完畢的時間。
【輸入格式】:
第一行僅乙個資料n,表示產品的數量。(0貪心策略:
設 ei = min。並構建最優作業加工順序集合 s = 。
將e按照從小到大的順序排序,然後從第1個開始處理,若 ei = ai ,則將它排在s集合從頭開始的作業後面,若無首作業,則它就成為s的首作業,若 ei = bi , 則將它排在從尾開始的作業前面,若無尾作業,則它成為s的尾作業。
//參考程式
#include
using
namespace std;
int ans[
1005
],n,k,i,j,t,a[
1005];
int b[
1005
],m[
1005
],s[
1005];
void
read()
;void
solve()
;int
main()
void
read()
void
solve()
for(i =
1;i <= n-
1; i++
)//按產品的加工順序從小到大排序
for(j = i+
1; j <= n; j++)if
(m[i]
>m[j])
k=0; t= n+1;
for(i=
1;i<=n;i++
)//安排產品的加工順序
if(m[i]
== a[s[i]])
else
t=0;k=0;
//k為a加工時間,t為b加工時間
for(i=
1; i <= n; i++
)//模擬計算最少加工時間
cout << t << endl;
for(i =
1; i<=n;i++
) cout << ans[i]
<<
" ";
cout << endl;
}
流水作業排程問題
流水作業排程問題 n個作業在2 臺機器上m1和 m2組成的流水線上完成加工。每個作業加工的順序都是先在 m1上加工,後在 m2上加工。在兩台機器上加工的時間分別為ai和 bi。解 流水作業排程 根據johnson法則 使用結構體陣列f1 j 存放a i 使用結構體陣列f2 k 存放a i b i 的...
流水作業排程問題
n個作業在2臺機器上m1和m2組成的流水線上完成加工。每個作業加工的順序都是先在m1上加工,後在m2上加工。在兩台機器上加工的時間分別為ai和bi。目標 確定這n個作業的加工順序,使得從第一台作業開始加工,到最後乙個作業完成加工所需要的時間最少。假設要對集合s中的作業進行加工,當m1開始加工時,假設...
流水作業排程問題
n個作業要在由2臺機器m1和m2組成的流水線上完成加工。每個作業加工的順序都是先在m1上加工,然後在m2上加工。m1和m2加工作業i所需的時間分別為a i 和b i 流水作業排程問題要求確定這n個作業的最優加工順序,使得從第乙個作業在機器m1上開始加工,到最後乙個作業在機器m2上加工完成所需的時間最...