def how_many_fits(w,h,index,set): if w == 0 or h == 0 or index < 0: return 0 else: my_items = int(w/set[index])*int(h/set[index]) right = how_many_fits(w % set[index], h, index - 1, set) bottom = how_many_fits(int(w/set[index]) * set[index], h % set[index], index - 1, set) return my_items + right + bottom room = input().split() h = int(room[0]) w = int(room[1]) types = int(input()) sizes = [int(b) for b in input().split()] possible_sizes = [] possible_types = 0 for size in sizes: if size <= h and size <= w: possible_sizes.append(size) possible_types += 1 #pow_set_size = (int) (pow(2, possible_types)) #power_set = [] #for counter in range(0, pow_set_size): # combo = [] # for j in range(0, possible_types): # if((counter & (1 << j)) > 0): # combo.append(possible_sizes[j]) # if len(combo) > 0: # if(h % combo[0]) == 0 and (w % combo[0]) == 0: # power_set.append(combo) if len(possible_sizes) == 0 or h % possible_sizes[0] != 0 or w % possible_sizes[0] != 0: print(-1) else: # min_combo = w*h # for set in power_set: # current = how_many_fits(w,h,len(set) - 1, set) # if current < min_combo: # min_combo = current # print(min_combo) current = how_many_fits(w,h,len(possible_sizes) - 1, possible_sizes) print(current)
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | def how_many_fits(w,h,index,set): if w == 0 or h == 0 or index < 0: return 0 else: my_items = int(w/set[index])*int(h/set[index]) right = how_many_fits(w % set[index], h, index - 1, set) bottom = how_many_fits(int(w/set[index]) * set[index], h % set[index], index - 1, set) return my_items + right + bottom room = input().split() h = int(room[0]) w = int(room[1]) types = int(input()) sizes = [int(b) for b in input().split()] possible_sizes = [] possible_types = 0 for size in sizes: if size <= h and size <= w: possible_sizes.append(size) possible_types += 1 #pow_set_size = (int) (pow(2, possible_types)) #power_set = [] #for counter in range(0, pow_set_size): # combo = [] # for j in range(0, possible_types): # if((counter & (1 << j)) > 0): # combo.append(possible_sizes[j]) # if len(combo) > 0: # if(h % combo[0]) == 0 and (w % combo[0]) == 0: # power_set.append(combo) if len(possible_sizes) == 0 or h % possible_sizes[0] != 0 or w % possible_sizes[0] != 0: print(-1) else: # min_combo = w*h # for set in power_set: # current = how_many_fits(w,h,len(set) - 1, set) # if current < min_combo: # min_combo = current # print(min_combo) current = how_many_fits(w,h,len(possible_sizes) - 1, possible_sizes) print(current) |