forked from anshukumar045/ScalaCollections
-
Notifications
You must be signed in to change notification settings - Fork 0
/
knapsack.scala
30 lines (24 loc) · 808 Bytes
/
knapsack.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
case class Item(weight: Int, value: Int)
def knapsack(items: Seq[Item], capacity: Int): Int = {
val n = items.length
val dp = Array.ofDim[Int](n + 1, capacity + 1)
for {
i <- 1 to n
w <- 0 to capacity
} {
dp(i)(w) =
if (items(i - 1).weight <= w) {
math.max(dp(i - 1)(w), items(i - 1).value + dp(i - 1)(w - items(i - 1).weight))
} else {
println(s"else i = $i w = $w - value= ${dp(i - 1)(w)} ${dp.map(_.mkString("-")).mkString(",")}")
dp(i - 1)(w)
}
}
dp(n)(capacity)
}
val items = Seq(Item(2, 3), Item(3, 4), Item(4, 5), Item(5, 6))
val capacity = 5
// Solve the knapsack problem
val maxValue = knapsack(items, capacity)
// Print the result
println(s"Maximum value in the knapsack: $maxValue")