Подтвердить что ты не робот

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

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

enter image description here

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

Скажем здесь мой ввод:

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-массив. Может ли кто-то из вас помочь мне с этим и показать, по-слоям, как и на моем изображении, как это будет выглядеть? Спасибо.

enter image description here

4b9b3361

Ответ 1

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

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

Ответ 2

Предположим, вы используете таблицу трех измерений: A[x][y][z]=k, x: сумма 1-го свойства; y: сумма 2-го свойства; z: sum 3rd property; 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)

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

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