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
42
users/wpcarro/scratch/facebook/london-knapsack.py
Normal file
42
users/wpcarro/scratch/facebook/london-knapsack.py
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
from utils import get, init_table, print_table
|
||||
|
||||
def optimal_itinerary(duration, items):
|
||||
min_duration = min([duration for duration, _ in items])
|
||||
max_duration = max([duration for duration, _ in items])
|
||||
table = init_table(rows=len(items), cols=int(max_duration / min_duration), default=0)
|
||||
to_index = lambda duration: int(duration / min_duration) - 1
|
||||
to_duration = lambda i: i * min_duration + min_duration
|
||||
|
||||
for row in range(len(table)):
|
||||
for col in range(len(table[row])):
|
||||
curr_duration = to_duration(col)
|
||||
duration, value = items[row]
|
||||
if duration > curr_duration:
|
||||
a = 0
|
||||
else:
|
||||
a = value + get(table, row - 1, to_index(curr_duration - duration))
|
||||
b = get(table, row - 1, col)
|
||||
table[row][col] = max([a, b])
|
||||
|
||||
print_table(table)
|
||||
return table[-1][-1]
|
||||
|
||||
# You're in London for two days, and you'd like to see the following
|
||||
# attractions. How can you maximize your time spent in London?
|
||||
westminster = (0.5, 7)
|
||||
globe_theater = (0.5, 6)
|
||||
national_gallery = (1, 9)
|
||||
british_museum = (2, 9)
|
||||
st_pauls_cathedral = (0.5, 8)
|
||||
items = [
|
||||
westminster,
|
||||
globe_theater,
|
||||
national_gallery,
|
||||
british_museum,
|
||||
st_pauls_cathedral,
|
||||
]
|
||||
result = optimal_itinerary(2, items)
|
||||
expected = 24
|
||||
print(result, expected)
|
||||
assert result == expected
|
||||
print("Success!")
|
||||
Loading…
Add table
Add a link
Reference in a new issue