時間限制: 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個工件的加工順序,才能使得...