DEV//UNIT

Рюкзак 0/1

Что взять в рюкзак при лимите веса: каждая вещь либо в рюкзаке, либо нет.

время O(n · capacity)память O(n · capacity)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function knapsack(items: Array<[w: number, v: number]>, cap: number): number {
2 const n = items.length
3 // d[i][c] — максимум ценности из первых i предметов при вместимости c
4 const d: number[][] = Array.from({ length: n + 1 }, () =>
5 new Array(cap + 1).fill(0),
6 )
7
8 for (let i = 1; i <= n; i++) {
9 const [w, v] = items[i - 1]!
10 for (let c = 0; c <= cap; c++) {
11 d[i][c] = d[i - 1][c] // не берём предмет i
12 if (w <= c && d[i - 1][c - w] + v > d[i][c]) {
13 d[i][c] = d[i - 1][c - w] + v // берём
14 }
15 }
16 }
17
18 return d[n][cap]
19}

Проблема

Что взять в рюкзак при лимите веса: каждая вещь либо в рюкзаке, либо нет.

Что вы видите

Таблица: строки — предметы, столбцы — вместимость; клетка — максимум ценности.

Как это работает

d[i][c] = max(без предмета i, с предметом i при весе ≤ c). Обратный ход восстанавливает список. Фундамент распределения ресурсов: бюджеты, грузы, портфели.

Пошаговый разбор

  1. 01

    Не берём

    Наследуем строку выше.

  2. 02

    Берём

    d[i−1][c−w] + ценность.

  3. 03

    Ответ

    Правый нижний угол.

Complexity и ограничения

time
O(n · capacity)
space
O(n · capacity)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Инвестпортфели

Выбор проектов под бюджет с максимальной отдачей.

Грузоперевозки

Загрузка транспорта по весу и ценности.

Мощности

Задачи на серверы под лимит ресурсов.

Связанные алгоритмы

Shorts

«Бюджет, грузы, портфель: всё это рюкзак»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Бюджет, грузы, портфель: всё это рюкзак
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/knapsack