Все темы
114

Выбираем лучший набор вещей, которые влезают в бюджет

Tier 1Закрыто

Где применяется

1. Задача

Ты ведёшь рекламную кампанию с фиксированным бюджетом, скажем 5000. Перед тобой список размещений. У каждого есть цена и ожидаемая польза, ценность. Каждое размещение покупают целиком или не покупают, половину слота взять нельзя.

Какой набор размещений даст больше всего ценности и не выйдет за бюджет? Первое, что приходит в голову: перебрать все возможные наборы. С 10 размещениями их 1024, это нормально. С 40 их больше триллиона, и перебор растянется на часы.

Это задача о рюкзаке 0/1 (0/1 knapsack), одна из самых частых форм DP в реальной работе. «0/1» значит, что каждый предмет либо берут целиком (1), либо не берут (0).

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит

Как узнать

Динамическое программирование (1-D) (Dynamic programming (1-D))

Эти слова в условии значат этот паттерн

  • лучшее/максимум/минимум, заканчивающееся в позиции i
  • число способов дойти, подняться или замостить
  • нельзя брать два соседних элемента
  • минимальная стоимость пути по сетке
  • повторяющиеся подзадачи, одно и то же состояние считается заново

Похоже, но не то

n состояний по O(1) работы дают O(n). Память падает до O(1), когда важны только последние состояния.

На LeetCode

Задачи, где каждый предмет либо берут один раз, либо оставляют, при ограничении, например разбить массив на две равные суммы или получить цель, расставив плюсы и минусы. Таблица строится по предмету и оставшейся вместимости.

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности