貪心 加工生產排程(雙機排程貪心問題)

2021-08-28 00:27:26 字數 1111 閱讀 6299

時間限制: 1 sec  記憶體限制: 64 mb

提交: 41  解決: 21

[提交] [狀態] [討論版] [命題人:外部匯入]

題目描述

有n個部件需在a、b機器上加工,每個工件都必須經過先a後b兩道工序。

已知:部件i在a、b機器上的加工時間分別為ai,bi。

問:如何安排n個工件的加工順序,才能使得總加工時間最短?

輸入第1行僅乙個整數n (0輸出

只有乙個數,表示最少的加工時間;

樣例輸入

5

3 5 8 7 10

6 2 1 4 9

樣例輸出

34
[提交][狀態]

【分析】

此題貪心策略不好理解。

(1)考慮只有兩個任務。

機器a一定無空閒直到結束,而機器b必有一段空閒,即剛開始等待a給他第乙個任務,我們要讓第乙個任務在機器a上盡量早結束,所以讓ai小的先執行。  這樣就可以了嗎? 給出一組樣例:任務1=,任務2=,我們發現,若先執行任務1,總時間為12,若先執行2再執行1,總時間為10。這是因為任務1的bi太小,其執行完後機器b留下一段時間的空閒。  可見,我們不僅要縮小一開始機器b的等待時間,還要縮小過程中機器b的空閒時間。 縮小空閒時間的方法就是讓bi小的盡量留到後面再加工。 綜上所述,得出結論:需要考慮兩個條件:①ai小的靠前②bi小的靠後。怎樣決定乙個任務靠前還是靠後呢?任務本身做乙個權衡比較ai與bi的大小,遵循小的那乙個的條件。至此即可解決兩個任務的情況。

(2)考慮多個任務

把所有任務分為兩類,1類aibi。至於ai=bi放在哪一類均可,無影響,就因為ai=bi,安排在任意位置,對結果的貢獻是不變的。根據(1)中的結論,1類可按ai排序,2類按bi排序,安排後的結果一定是1類全部執行完再執行2類。

【**】

#includeusing namespace std;

struct nodeitem[1010];

bool cmp(node x,node y)

return x.flag}int main()

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

}

貪心 加工生產排程

問題 d 貪心 加工生產排程 時間限制 1 sec 記憶體限制 64 mb 提交 狀態 題目描述 有n個部件需在a b機器上加工,每個工件都必須經過先a後b兩道工序。已知 部件i在a b機器上的加工時間分別為ai,bi。問 如何安排n個工件的加工順序,才能使得總加工時間最短?輸入第1行僅乙個整數n ...

貪心 加工生產排程

時間限制 1 s 空間限制 128000 kb 題目等級 gold 某工廠收到了n個產品的訂單,這n個產品分別在a b兩個車間加工,並且必須先在a車間加工後才可以到b車間加工。某個產品i在a b兩車間加工的時間分別為ai bi。怎樣安排這n個產品的加工順序,才能使總的加工時間最短。這裡所說的加工時間...

貪心 加工生產排程 經典

貪心 加工生產排程 時間限制 1 sec 記憶體限制 64 mb 提交 61 解決 24 提交 狀態 討論版 命題人 外部匯入 題目描述 有n個部件需在a b機器上加工,每個工件都必須經過先a後b兩道工序。已知 部件i在a b機器上的加工時間分別為ai,bi。問 如何安排n個工件的加工順序,才能使得...