題目傳送門
這道題是johnson雙流水線排程演算法的基礎題。
本題是要求乙個加工順序使得總的加工時間最少,而要使加工時間最少,就是讓各車間的空閒時間最少。一旦a車間開始加工,便會不停地進行加工(我們不要去管車間是否能夠一直生產,因為他們有三班,可以24時間不停地運轉)。關鍵是b車間在生產的過程中,有可能要等待a車間的初加工產品。很顯然所安排的第乙個產品在a車間加工時,b車間是要等待的,最後乙個產品在b車間加工時,a車間已經完成了任務。
要使總的空閒時間最少:
(1)就要把在a車間加工時間最短的部件優先加工,這樣使得b車間能以最快的速度開始加工;
(2)把放在b車間加工時間最短的產品放在最後加工,這樣使得最後a車間的空閒時間最少。
更嚴格的數學證明
#include #define _for(i,a,n) for(int i=a;i>t;while(t--)
#define close() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
typedef long long ll;
templateinline void read(t &x)while(isdigit(ch))x=x*10+ch-'0',ch=getchar();x*=f;finish_read=1;}
templateinline void print(t x)
templateinline void writeln(t x)
templateinline void write(t x)
using namespace std;
const int maxn = 1e3;
struct node
node(int _id = 0,int _t = 0,int _ab = 0):id(_id), t(_t), ab(_ab){}
}arr[maxn + 5];
int n, a[maxn + 5], b[maxn + 5], ans[maxn + 5], ti[maxn + 5];
void johnson()
sort(arr + 1, arr + n + 1);
int l = 0, r = n + 1;
rep(i, 1, n)
}int main()
C 一本通 1 1 例 4 加工生產排程
一本通題庫 1425 libreoj 10003 vjudge 注意 libreoj和一本通題庫題意相同,但資料範圍不同。以一本通題庫為準。某工廠收到了 n nn 個產品的訂單,這 n nn 個產品分別在 a b a ba b 兩個車間加工,並且必須先在 a aa 車間加工後才可以到 b bb 車間...
一本通 1 1 例 1 活動安排
題目link 貪心即可,將活動按右端點排序,排序後能選則選。o n 證明 首先對於乙個前面都為最優序列的前提下,如果對於乙個活動 a 使它發生是一種最優序列,然後再對於另乙個活動 b 它的結束時間比 a 早,並且開始時間也滿足條件,那麼根據貪心就可以選它,因為它既合法又是一種最優序列。1 inclu...
1425 例題4 加工生產排程
1425 例題4 加工生產排程 時間限制 1000 ms 記憶體限制 65536 kb 提交數 2196 通過數 571 題目描述 某工廠收到了 n 個產品的訂單,這 n 個產品分別在 a b 兩個車間加工,並且必須先在 a 車間加工後才可以到 b 車間加工。某個產品 i 在 a,b 兩車間加工的時...