略譯

原題目連結

你手上有 n 個士兵,每個士兵給你 b, j
代表你需要花 b 秒幫他們準備,之後他們會花 j 秒獨自完成任務
每個士兵間的任務沒有任何關聯,互不影響
問從你開始幫第一個士兵準備後,
最快幾秒後所有士兵完成任務

題解

最快幾秒後達成,所以我們要讓最差的盡量好。

最差的就是任務耗時的,我們希望任務越耗時的越早進行,
否則把它和任何一件較不耗時的任務對調順序,都會讓所需時間變糟。

舉兩個例子,對調看看會變好還是變糟,
是個找出方向或證明正確性的技巧之一。

因此我們需要將每個士兵,按照任務耗時長短排序,
再一個一個送他們出任務,並取最久的作為答案。

實作提示

  • sort 並不困難,不過我們每個士兵有兩個數字,要綁在一起
    如果自己寫 sort 那沒問題,但要使用內建的 qsort / STL sort
    就得多下點功夫。
    • 方法一:另外開一條陣列存 index 然後對這個陣列 sort,
      比較依據不是這陣列自身存的值,而是找出以此值作為 index 的士兵來比較
    • 方法二:用 structclass兩個數字包成一個東西
      • 方法二因為要搬動的記憶體量較多,可能較慢