git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from utils import get, init_table, print_table
 | 
						|
 | 
						|
# This problem has a few variants:
 | 
						|
#   - limited supply of each item
 | 
						|
#   - unlimited supply of each item
 | 
						|
#   - fractional amounts of each item (e.g. rice)
 | 
						|
 | 
						|
def max_haul(capacity, items):
 | 
						|
    min_kg = min([kg for _, kg in items])
 | 
						|
    max_kg = max([kg for _, kg in items])
 | 
						|
 | 
						|
    cols = int(max_kg / min_kg)
 | 
						|
    fr_col_index = lambda index: min_kg * index + min_kg
 | 
						|
    to_col_index = lambda capacity: int((capacity - min_kg) * cols / max_kg)
 | 
						|
 | 
						|
    table = init_table(rows=len(items), cols=cols, default=0)
 | 
						|
    for row in range(len(table)):
 | 
						|
        for col in range(len(table[row])):
 | 
						|
            curr_capacity = fr_col_index(col)
 | 
						|
            value, kg = items[row]
 | 
						|
 | 
						|
            if kg > curr_capacity:
 | 
						|
                a = 0
 | 
						|
            else:
 | 
						|
                a = value + get(table, row - 1, to_col_index(curr_capacity - kg))
 | 
						|
 | 
						|
            b = get(table, row - 1, col)
 | 
						|
            table[row][col] = max([a, b])
 | 
						|
        print_table(table)
 | 
						|
    return table[-1][-1]
 | 
						|
 | 
						|
guitar = (1500, 1)
 | 
						|
stereo = (3000, 4)
 | 
						|
laptop = (2000, 3)
 | 
						|
necklace = (2000, 0.5)
 | 
						|
items = [necklace, guitar, stereo, laptop]
 | 
						|
capacity = 4
 | 
						|
result = max_haul(capacity, items)
 | 
						|
expected = 4000
 | 
						|
print(result, expected)
 | 
						|
assert result == expected
 | 
						|
print("Success!")
 |