-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.rb
More file actions
38 lines (30 loc) · 852 Bytes
/
main.rb
File metadata and controls
38 lines (30 loc) · 852 Bytes
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
31
32
33
34
35
36
37
38
# arr[k][max_weight] - max cost for first k items in max_weight backpack
WEIGHTS = [3,4,5,8,9]
COSTS = [1,6,4,7,6]
def fill_function(k, max_weight)
arr = Array.new(k + 1) { Array.new(max_weight) }
(k + 1).times { |i| arr[i][0] = 0 }
max_weight.times { |j| arr[0][j] = 0 }
1.upto(k) do |i|
1.upto(max_weight - 1) do |j|
if j >= WEIGHTS[i - 1]
arr[i][j] = [arr[i - 1][j], arr[i - 1][j - WEIGHTS[i - 1]] + COSTS[i - 1]].max
else
arr[i][j] = arr[i - 1][j]
end
end
end
arr
end
def find_answer(arr, k, max_weight)
if arr[k][max_weight - 1] == 0
return
elsif arr[k][max_weight - 1] == arr[k - 1][max_weight - 1]
find_answer(arr, k - 1, max_weight)
else
find_answer(arr, k - 1, max_weight - WEIGHTS[k - 1])
puts k
end
end
arr = fill_function(5, 13)
find_answer(arr, 5, 13)