加工生產排程

2021-10-18 13:30:30 字數 1525 閱讀 7288

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兩車間加工...