時間限制: 1 s
空間限制: 128000 kb
題目等級 : ** gold
某工廠收到了n個產品的訂單,這n個產品分別在a、b兩個車間加工,並且必須先在a車間加工後才可以到b車間加工。
某個產品i在a、b兩車間加工的時間分別為ai、bi。怎樣安排這n個產品的加工順序,才能使總的加工時間最短。這裡所說的加工時間是指:從開始加工第乙個產品到最後所有的產品都已在a、b兩車間加工完畢的時間。
輸入描述 input description
第一行僅—個資料n(0接下來n個資料是表示這n個產品在a車間加工各自所要的時間(都是整數)。
最後的n個資料是表示這n個產品在b車間加工各自所要的時間(都是整數)。
輸出描述 output description
第一行乙個資料,表示最少的加工時間;
樣例輸入 sample input
3 5 8 7 10
6 2 1 4 9
樣例輸出 sample output
資料範圍及提示 data size & hint
0貪心,需要用到johnson演算法,
不過在網上見大佬用了一種奇妙的思路,居然a了,不可思議
思路是:
先求出a廠的總時間suma,b廠的總時間sumb。
若suma>sumb,則總時間 ans=suma+minb(b廠時間的最小值)。
反之,總時間 ans=sumb+mina。
1 #include2 #include3using
namespace
std;
4int n,m,ans,mina=99999999,minb=99999999
,suma,sumb;
5int
main()614
for(int i=1;i<=n;++i)
1520
if(suma>sumb) ans = suma +minb;
21else ans = sumb +mina;
22 printf("%d"
,ans);
23return0;
24 }
johnson做法是
1 #include2 #include34using
namespace
std;
5const
int n = 1010;6
struct
jobs[n];
9int
n,m,ans;
10int
a[n],b[n],c[n],t[n];
1112
bool
cmp(job a,job b)
1316
void
jonson()
1724 sort(s+1,s+n+1
,cmp);
25int l = 0;26
int r = n+1;27
for(int i=1;i<=n;++i)
2834}35
intmain()
36
johnson演算法中,c陣列表示的是加工順序
洛谷上也有一道題p1248
與codevs不同的是需要輸出加工順序,應該輸出c陣列就是了
結果只過了三個點qaq,求大佬解釋
1 #include2 #include34using
namespace
std;
5const
int n = 1010;6
struct
jobs[n];
9int
n,m,ans;
10int
a[n],b[n],c[n],t[n];
11bool
cmp(job a,job b)
1215
void
jonson()
1623 sort(s+1,s+n+1
,cmp);
24int l = 0;25
int r = n+1;26
for(int i=1;i<=n;++i)
2733}34
intmain()
35
貪心 加工生產排程
問題 d 貪心 加工生產排程 時間限制 1 sec 記憶體限制 64 mb 提交 狀態 題目描述 有n個部件需在a b機器上加工,每個工件都必須經過先a後b兩道工序。已知 部件i在a b機器上的加工時間分別為ai,bi。問 如何安排n個工件的加工順序,才能使得總加工時間最短?輸入第1行僅乙個整數n ...
貪心 加工生產排程 經典
貪心 加工生產排程 時間限制 1 sec 記憶體限制 64 mb 提交 61 解決 24 提交 狀態 討論版 命題人 外部匯入 題目描述 有n個部件需在a b機器上加工,每個工件都必須經過先a後b兩道工序。已知 部件i在a b機器上的加工時間分別為ai,bi。問 如何安排n個工件的加工順序,才能使得...
貪心 加工生產排程(雙機排程貪心問題)
時間限制 1 sec 記憶體限制 64 mb 提交 41 解決 21 提交 狀態 討論版 命題人 外部匯入 題目描述 有n個部件需在a b機器上加工,每個工件都必須經過先a後b兩道工序。已知 部件i在a b機器上的加工時間分別為ai,bi。問 如何安排n個工件的加工順序,才能使得總加工時間最短?輸入...