背包問題

背包問題

中等

簡介

Bob 是個小偷。 經過數個月的縝密計畫,他終於成功破解了一家高級商店的保全系統。

他面前擺著許多物品,每件各有自己的值和重量。 Bob 很想把所有物品都帶走,但他的背包只能承受有限的重量。 Bob 必須仔細考慮要帶走哪些物品,才能讓他挑選的物品總值最大化。

說明

你的任務是決定要挑選哪些物品,讓選中物品的總價值最大化,同時考量背包的負重上限。

物品會以陣列的形式表示。 每個物品都有重量和價值。 所有給定的值都是嚴格正數。 Bob 每種物品只能拿一個。

例如:

Items: [
  { "weight": 5, "value": 10 },
  { "weight": 4, "value": 40 },
  { "weight": 6, "value": 30 },
  { "weight": 4, "value": 50 }
]

Knapsack Maximum Weight: 10

以上面的例子來說,第一個物品的重量是 5、價值是 10,第二個物品的重量是 4、價值是 40,依此類推。 在這個例子中,Bob 應該拿第二個和第四個物品,才能讓價值最大化,也就是 90。 他的背包負重上限是 10,所以無法拿到超過 90 的價值。


出處

Wikipedia連結會在新視窗或分頁中開啟
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Haskell Exercism

準備好開始 背包問題 了嗎?

註冊 Exercism,透過 107 個練習 和真人引導來學習並精通 Haskell,全部免費。