轨道
/
Haskell
Haskell
/
练习
/
背包问题
背包问题

背包问题

中等

简介

Bob 是个小偷。 经过几个月的精心策划,他终于成功破解了一家高档商店的安保系统。

摆在他面前的是许多物品,每件物品都有自己的价值和重量。 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,全部免费。