Алгоритм ранца с дополнительным свойством

Когда есть 1 собственность, я понимаю, что там происходит. У меня проблема с пониманием проблемы рюкзака, когда существует более 1 свойства.

введите описание изображения здесь

Я должен написать программу, которая использует алгоритм ранца с 2 свойствами. Учитель сказал нам, это должно быть сделано в трехмерном массиве. Я не могу представить, как будет выглядеть такой массив.

Допустим, вот мой вклад:

4 3 4 // number of records below, 1st property of backpack, 2nd property  of backpack
1 1 1 // 1st property, 2nd property, cost
1 2 2 // 1st property, 2nd property, cost
2 3 3 // 1st property, 2nd property, cost
3 4 5 // 1st property, 2nd property, cost

И результат будет выглядеть так:

4    // the cheapest sum of costs of 2 records
1 3  // numbers of these 2 records

Объяснение вывода: 2 набора записей помещаются в 1-ю строку ввода:

(1) - запись № 1 и запись № 3

  1 1 1
+ 2 3 3
-------
  3 4 4

(2) - запись № 4

  3 4 5

Поскольку первый набор записей является самым дешевым (4 < 5), мы выбрали его. Мне нужно не только узнать, существует ли такой набор записей, но и найти записи, которые я суммировал.

Но сейчас мне нужно только понять, как будет выглядеть 3d-массив. Могут ли некоторые из вас помочь мне с этим и показать слой за слоем, как на моем изображении, как это будет выглядеть? Благодарю.

введите описание изображения здесь

2 ответа

Допустим, вы используете таблицу с тремя измерениями: A[x][y][z]=k, x: сумма 1-го имущества; y: сумма 2-го свойства; z: сумма 3-го имущества; k: минимальная стоимость (максимальное вознаграждение, которое я предпочитаю использовать за вознаграждение)

Таким образом, вы перебираете предметы. Скажем, текущий предмет (p1, p2, p3, награда) (награда = - стоимость). для каждого (x,y,z,k), ваша формула обновления:

A[x+p1][y+p2][z+p3] = max(A[x+p1][y+p2][z+p3], A[x+p1][y+p2][z+p3] + reward)

Если 1-й член на RHS больше, на слоте A[x+p1][y+p2][z+p3]Конфигурация ранца остается на месте; в противном случае вы обновляете рюкзак A[x+p1][y+p2][z+p3] плюс текущий товар.

Надеюсь, это прояснит ситуацию.

Вы пытаетесь сделать что-то невозможное - это ваша проблема.

Когда вы добавляете количество измерений, ваши элементы приобретают дополнительные свойства. Таким образом, вместо левой стороны столбца таблицы (prop1), у вас есть сторона прямоугольника (prop1 Икс prop2) или сторона блока (prop1 Икс prop2 Икс prop3) и так далее. Но существующие ограничения, которые определяют верхнюю сторону строки таблицы, должны иметь одинаковое количество измерений. Не только одно измерение!, Таким образом, вы никогда не сможете поместить задачу с двумя свойствами в трехмерный блок, вместо этого вам нужен блок 4D. 6D блок на 3 свойства и тд.

Другие вопросы по тегам