a603 加工生產排程

2021-09-28 10:01:00 字數 2848 閱讀 5504

time limit: 1 second

memory limit: 32 mb

【問題描述】

某工廠收到了n個產品的訂單,這n個產品分別在a、b兩個車間加工,並且必須先在a車間加工後才可以到b車間加工。

某個產品i在a、b兩車間加工的時間分別為ai、bi。怎樣安排這n個產品的加工順序,才能使總的加工時間最短。這裡所說的加工時間是指:從開始加工第乙個產品到最後所有的產品都已在a、b兩車間加工完畢的時間。

【輸入格式】

共三行。

第一行僅乙個資料n(0<n<1000),表示產品的數量。

第二行,n個資料,表示這n個產品在a車間加工各自所要的時間(都是整數)。

第二行,n個資料,表示這n個產品在b車間加工各自所要的時間(都是整數)。

【輸出格式】

共兩行。第一行乙個資料,表示最少的加工時間;第二行是一種最小加工時間的加工順序。
【輸入樣例】

5

3 5 8 7 10

6 2 1 4 9

【輸出樣例】

34

1 5 4 2 3

【題目鏈結】:

【題意】

【題解】

貪心;

因為b機器在工作的時候,a機器還能夠工作;

所以就這樣;

對於a機器;

先找乙個在a機器上加工時間短的產品;

讓它在機器上加工完

盡早讓b機器開始工作;

這樣b機器和a機器它們的空閒時間就會最短了;

同時讓b機器優先加工的產品時間盡量長一點;

這樣同時在a機器上加工的產品就會盡可能地多;

總之就是讓a機器和b機器的空閒時間盡可能地短;

/*

先找乙個在a機器上加工時間短的產品;

同時讓b機器優先加工的產品時間盡量長一點;

*/

上面這兩句話就是關鍵了;

按照這個原則;

處理出m[i]=min(a[i],b[i]);

然後把m陣列公升序排;

然後順序處理n個m[i];

如果m是由a陣列搞來的,就放在資料的最前(如果前面有元素了就盡可能靠前,否則放在序列的最後(如果最後也有元素了就盡量靠後);

如樣例,n=5

(a1,a2,a3,a4,a5)=(3,5,8,7,10)

(b1,b2,b3,b4,b5)=(6,2,1,4,9)

則(m1,m2,m3,m4,m5)=(3,2,1,4,9)

排序之後為(m3,m2,m1,m4,m5)

處理m3:因為m3=b3,所以m3排在後面;加入m3之後的加工順序為( , , , ,3);

處理m2:因為m2=b2,所以m2排在後面;加入m2之後的加工順序為( , , ,2,3);

處理m1:因為m2=a1,所以m1排在前面;加入m1之後的加工順序為(1, , ,2,3);

處理m4:因為m4=b4,所以m4排在後面;加入m4之後的加工順序為(1, ,4,2,3);

處理m5:因為m5=b5,所以m5排在後面;加入m5之後的加工順序為(1,5,4,2,3);

則最優加工順序就是(1,5,4,2,3),最短時間34。顯然這是最優解。

然後根據序列模擬出總的時間就好;

(b機器在工作的時候,a機器也可以繼續加工其他產品哦);

【完整**】

//#include 

#include

#include

#include

using

namespace

std;

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define ll long long

#define rep1(i,a,b) for (int i = a;i <= b;i++)

#define rep2(i,a,b) for (int i = a;i >= b;i--)

#define mp make_pair

#define pb push_back

#define fi first

#define se second

#define rei(x) scanf("%d",&x)

#define rel(x) scanf("%lld",&x)

typedef pair pii;

typedef pairpll;

const

int dx[9] = ;

const

int dy[9] = ;

const

double pi = acos(-1.0);

const

int n = 1100;

struct abc

;abc m[n];

int a[n],b[n], n, xl[n];

void px()

int main()

px();

int l = 1, r = n;

rep1(i, 1, n)

int po = 1,time = 0,j = 2;

time += a[xl[po]];

while (1)

if (a[xl[j]]0;

j = j + 1;

}else}}

printf("%d\n", time);

rep1(i, 1, n)

return

0;}

加工生產排程

題目描述 某工廠收到了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...

加工生產排程

1425 例題4 加工生產排程 時間限制 1000 ms 記憶體限制 65536 kb 提交數 2662 通過數 689 題目描述 某工廠收到了 n 個產品的訂單,這 n 個產品分別在 a b 兩個車間加工,並且必須先在 a 車間加工後才可以到 b 車間加工。某個產品 i 在 a,b 兩車間加工的時...