1425:【例題4】加工生產排程
時間限制: 1000 ms 記憶體限制: 65536 kb
提交數: 2662 通過數: 689
【題目描述】
某工廠收到了 n 個產品的訂單,這 n 個產品分別在 a、b 兩個車間加工,並且必須先在 a 車間加工後才可以到 b 車間加工。
某個產品 i 在 a,b 兩車間加工的時間分別為ai,bi。怎樣安排這 n 個產品的加工順序,才能使總的加工時間最短。
這裡所說的加工時間是指:從開始加工第乙個產品到最後所有的產品都已在 a,b 兩車間加工完畢的時間。
【輸入】
第一行僅—個資料 n ,表示產品的數量;
接下來 n 個資料是表示這 n 個產品在 a 車間加工各自所要的時間;
最後的 n 個資料是表示這 n 個產品在 b 車間加工各自所要的時間。
【輸出】
第一行乙個資料,表示最少的加工時間;
第二行是一種最小加工時間的加工順序。
【輸入樣例】
53 5 8 7 10
6 2 1 4 9
【輸出樣例】
341 5 4 2 3
【提示】
對於100%的資料, 0 < n < 10000,所有數值皆為整數。
參考:參考johnson演算法
修訂:思路:johnson演算法:設n1為a=b的作業集合,將n1的作業按a非降序排序,n2的作業按b非增序排序,則n1作業接n2作業構成最優順序。
原因:我們第一件物品加工b機器肯定會等,所以就讓a機器開始加工的物品時間最短,而我們b機器最後加工完成肯定是a機器在等,所以讓b機器最後加工完的時間盡可能短
oj:
#include
#define ll long long
#define pii pair
using
namespace std;
const
int n=
1e6+5;
struct node
}c[n]
;int n,a[n]
,b[n]
,f[n]
;//f儲存編號
intmain()
//因為排序,所以下標(儲存位置)!=編號,所以要id(編號)
sort
(c+1
,c+n+1)
;int l=
1,r=n;
for(
int i=
1;i<=n;i++
)//i是下標(儲存位置)
else
}int ta=
0,tb=0;
for(
int i=
1;i<=n;i++
) cout << tb << endl;
for(
int i=
1;i<=n;i++
)return0;
}
加工生產排程
題目描述 某工廠收到了n個產品的訂單,這n個產品分別在a b兩個車間加工,並且必須先在a車間加工後才可以到b車間加工。某個產品i在a b兩車間加工的時間分別為ai bi。詢問怎樣安排這n個產品的加工順序,才能使總的加工時間最短。這裡所說的加工時間是指 從開始加工第乙個產品到最後所有的產品都已在a b...
加工生產排程
n個作業要在由兩台機器m1和m2組成的流水線上完成加工 每個作業i必須先在m1上然後在m2上加工,時間分別為ai和bi。確定這n個作業的加工順序,使得從第乙個任務開始在m1上加工到最後乙個任務在m2上加工完成的總時間盡量小。直觀上,最優排程一定讓m1沒有空閒,m2的空閒時間盡量少。演算法 使用陣列f...
結論 加工生產排程
某工廠收到了n個產品的訂單,這n個產品分別在a b兩個車間加工,並且必須先在a車間加工後才可以到b車間加工。某個產品i在a b兩車間加工的時間分別為ai bi。詢問怎樣安排這n個產品的加工順序,才能使總的加工時間最短。這裡所說的加工時間是指 從開始加工第乙個產品到最後所有的產品都已在a b兩車間加工...