subtree(users/wpcarro): docking briefcase at '24f5a642'
git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
This commit is contained in:
commit
019f8fd211
766 changed files with 175420 additions and 0 deletions
46
users/wpcarro/scratch/facebook/camping-knapsack.py
Normal file
46
users/wpcarro/scratch/facebook/camping-knapsack.py
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
from utils import get, init_table, print_table
|
||||
|
||||
def max_haul(capacity, items, names):
|
||||
table = init_table(rows=len(items), cols=capacity, default=0)
|
||||
items_table = init_table(rows=len(items), cols=capacity, default=[])
|
||||
for row in range(len(table)):
|
||||
for col in range(len(table[row])):
|
||||
kg, value = items[row]
|
||||
curr_capacity = col + 1
|
||||
|
||||
if kg > curr_capacity:
|
||||
a = 0
|
||||
else:
|
||||
a = value + get(table, row - 1, curr_capacity - kg - 1)
|
||||
b = get(table, row - 1, col)
|
||||
|
||||
if a > b:
|
||||
rest = get(items_table, row - 1, curr_capacity - kg - 1)
|
||||
knapsack = [names.get(items[row])]
|
||||
if rest:
|
||||
knapsack += rest
|
||||
else:
|
||||
knapsack = get(items_table, row - 1, col)
|
||||
|
||||
table[row][col] = max([a, b])
|
||||
items_table[row][col] = knapsack
|
||||
print_table(table)
|
||||
return items_table[-1][-1]
|
||||
|
||||
water = (3, 10)
|
||||
book = (1, 3)
|
||||
food = (2, 9)
|
||||
jacket = (2, 5)
|
||||
camera = (1, 6)
|
||||
items = [water, book, food, jacket, camera]
|
||||
result = max_haul(6, items, {
|
||||
water: 'water',
|
||||
book: 'book',
|
||||
food: 'food',
|
||||
jacket: 'jacket',
|
||||
camera: 'camera',
|
||||
})
|
||||
expected = ['camera', 'food', 'water']
|
||||
print(result, expected)
|
||||
assert result == expected
|
||||
print("Success!")
|
||||
Loading…
Add table
Add a link
Reference in a new issue