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