Пример 1
В магазине продаётся N товаров, известна цена каждого. У покупателя есть S рублей. Он хочет купить как можно больше товаров, а среди всех способов купить максимальное количество — такой, при котором самый дорогой купленный товар стоит как можно больше.
В первой строке файла — числа S и N, в следующих N строках — цены товаров. Запишите в ответе максимальное количество товаров и цену самого дорогого товара при таком выборе.
Показать решение
1. Чтобы купить как можно больше, берём самые дешёвые товары — сортируем цены по возрастанию и берём с начала, пока хватает денег.
2. Количество уже не изменится, но самый дорогой из взятых можно заменить на более дорогой, если хватит денег.
3. Убираем последний взятый товар и ищем самый дорогой из оставшихся, который помещается в бюджет.
f = open('26.txt') # файл: в первой строке S и N, дальше N цен
S, N = map(int, f.readline().split()) # бюджет и количество товаров
a = sorted(int(f.readline()) for _ in range(N)) # цены по возрастанию
cnt, total = 0, 0 # сколько купили и сколько потратили
while cnt < N and total + a[cnt] <= S: # берём самые дешёвые, пока хватает денег
total += a[cnt] # платим за товар
cnt += 1 # ещё один товар куплен
rest = S - (total - a[cnt - 1]) # деньги, если не покупать последний (самый дорогой из взятых)
top = max(x for x in a[cnt - 1:] if x <= rest) # самый дорогой из оставшихся, который помещается в бюджет
print(cnt, top) # количество и цена самого дорогого товараОтвет зависит от файла с экзамена, поэтому готовых чисел здесь нет.
