嵩山磨劍坊的問題 (AP325 P-4-5)

1.0s 256M

嵩山磨劍坊接了 \(n\) 筆磨劍工作,磨劍師傅每次只能磨一把劍。除了每把劍各有所需的時間之外,每件工作的重要性也不同。假設第 \(i\) 筆訂單需要的時間是 \(t[i]\),而重要性是 \(w[i]\)。磨劍坊的計價方式是:每件工作都已經先收了一筆款項,假設第 \(i\) 筆訂單在時間 \(f\) 時完成,則需要扣款 \(f \times w[i]\),現在希望將 \(n\) 筆磨劍工作安排最好的順序,使得扣款總額越小越好。嵩山派掌門左冷禪是非常嚴厲的老闆,希望你能幫磨劍師傅找出最好的順序以免他遭到處罰。

舉例來說,如果有四把劍,磨劍需要的時間分別是 \(t = (1, 4, 5, 6)\),而重要性依序是 \(w = (1, 3, 4, 7)\)。如果依訂單編號順序 \((1, 2, 3, 4)\) 來磨,也剛好是工作時間由短到長的順序,每件工作的完成時間依序是 \((1, 5, 10, 16)\),扣款總額是 \(1 \times 1 + 5 \times 3 + 10 \times 4 + 16 \times 7 = 168\)。如果依照訂單編號順序 \((4, 1, 3, 2)\) 來磨,則 \(t\) 與 \(w\) 重新排列後分別是 \(t = (6, 1, 5, 4)\),\(w = (7, 1, 4, 3)\),完工時間是 \((6, 7, 12, 16)\),扣款總額是 \(6 \times 7 + 7 \times 1 + 12 \times 4 + 16 \times 3 = 145\)。這是這一題 \(24\) 種排列中最好的解。

輸入格式

輸入的第一行是工作數 \(n\)。第二行有 \(n\) 個正整數,依序是各訂單所需時間 \(t[1]\)、\(t[2]\)、…、\(t[n]\)。第三行有 \(n\) 個非負整數,依序是各訂單的重要性 \(w[1]\)、\(w[2]\)、…、\(w[n]\),相鄰以空白間隔。

限制

  • \(1 \le n < 10^5\)。
  • \(1 \le t[i] \le 1000\),\(0 \le w[i] \le 1000\)。
  • 答案不超過 \(10^{18}\)。

輸出格式

輸出最小的扣款總額。

評分說明

每筆計分測資獨立計分,每筆 5 分,共 100 分;範例不計分。

範例輸入

4
1 4 5 6
1 3 4 7

範例輸出

145

題目來源

本題出自中正大學吳邦一教授所著《AP325-從 APCS 實作題檢測三級到五級》(v1.5)第 4 章 P-4-5,第 118 頁;經作者同意於 AACPOJ 免費公開。教材下載:AP325 講義(Google Drive);Python 版:AP325-Python(HackMD)。

題目頁說明

快速鍵

主要功能

  • 範例測試 — 執行題目附帶的範例測資並自動比對預期輸出。
  • 自訂測試 — 自己貼 stdin 執行程式。可勾選「與預期輸出比對 (diff)」做行對行比對。
  • 模板 — 貼上你在個人資料設定的預設程式碼模板。
  • 協作 — 與其他同學共筆編輯這題的程式碼。
  • 自動草稿 — 編輯器內容每 1.5 秒自動存到瀏覽器(per 帳號 / 題目 / 語言)。
  • 提交 — 把程式碼交給 judge 評測,回傳 AC / WA / TLE 等結果。

限制

  • 程式碼最多 65,536 字元
  • 自訂測試 stdin 與預期輸出各最多 1 MB (約 100 萬字元)
  • 自訂測試與範例測試共用一個沙箱,每人約 3 秒 1 次 (範例測試 1 秒 1 次)
  • 自訂測試與範例測試都有 15 秒 牆鐘上限(正式評測仍依題目原本時限)
  • 互動題不提供自訂測試(無法模擬與 judge 互動)。
  • 提交評測本身沒有 rate limit,但同題短時間內多次提交會被視為刷分。