Ctrl K

k-я по величине сумма набора

Сложная
Дан массив целых чисел values и число k. Из массива можно выбрать любой набор элементов (в том числе пустой — его сумма 0 — или весь массив) и сложить их. Всего наборов 2ⁿ, и у каждого своя сумма. Выпишите суммы всех наборов в порядке убывания, не убирая повторы: наборы с одинаковой суммой — это всё равно разные наборы. Верните k-ю сумму в этом списке (нумерация с единицы).
Пример 1
values=[3, -1, 2], k=4 → 2

Суммы всех подмножеств по убыванию: 5, 4, 3, 2, 2, 1, 0, -1. Четвёртая — 2.

Пример 2
values=[-5, -7], k=1 → 0

Выгоднее всего не брать ничего: пустой набор даёт 0.

Пример 3
values=[4, 4, 4], k=3 → 8

Суммы по убыванию: 12, 8, 8, 8, 4, … — равные суммы считаются отдельно, поэтому третья тоже 8.

Ограничения
  • 1 ≤ n = len(values) ≤ 10⁵
  • -10⁹ ≤ values[i] ≤ 10⁹
  • 1 ≤ k ≤ min(2000, 2ⁿ)
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиНаращиваем капитал проектами СложнаяБольше заказов к сроку СложнаяСамый узкий отрезок для всех списков СложнаяБригада с оплатой по навыку СложнаяТемп отряда задаёт самый слабый Сложная
загружаем Python…
Вход
values=[3, -1, 2], k=4
Ожидается
2

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 100 тестов на сервере, включая скрытые.