[題解] UVa 11729 - Commando War
Tags
- 題解
- UVa
- E難度
略譯
你手上有 n 個士兵,每個士兵給你 b, j
代表你需要花 b 秒幫他們準備,之後他們會花 j 秒獨自完成任務
每個士兵間的任務沒有任何關聯,互不影響
問從你開始幫第一個士兵準備後,
最快幾秒後所有士兵完成任務
題解
最快幾秒後達成,所以我們要讓最差的盡量好。
最差的就是任務耗時的,我們希望任務越耗時的越早進行,
否則把它和任何一件較不耗時的任務對調順序,都會讓所需時間變糟。
舉兩個例子,對調看看會變好還是變糟,
是個找出方向或證明正確性的技巧之一。
因此我們需要將每個士兵,按照任務耗時長短排序,
再一個一個送他們出任務,並取最久的作為答案。
實作提示
- sort 並不困難,不過我們每個士兵有兩個數字,要綁在一起。
如果自己寫 sort 那沒問題,但要使用內建的 qsort / STL sort,
就得多下點功夫。- 方法一:另外開一條陣列存 index 然後對這個陣列 sort,
比較依據不是這陣列自身存的值,而是找出以此值作為 index 的士兵來比較。 - 方法二:用 struct 或 class 把兩個數字包成一個東西
- 方法二因為要搬動的記憶體量較多,可能較慢。
- 方法一:另外開一條陣列存 index 然後對這個陣列 sort,
cmusu