Я понимаю решение динамического программирования проблемы с коробкой Stacking, которая пытается найти максимально возможную длину стека, который может быть сформирован определенным набором ящиков, которые могут вращаться в любом направлении, так что нижний ящик всегда меньше по ширине и длине по сравнению с коробкой, которая выше в стеке.Число оборотов для коробки в блоке Укладка (DP) алгоритм 3 или 6?
Однако я не смог понять, почему для каждой коробки требуются только 3 ориентации. По моему мнению, количество ориентаций должно быть 6. То есть для каждого из трех измерений, взятых за высоту, вы должны иметь две комбинации.
online resource В качестве способа создания трех ориентаций (2 оборота) исходного окна показано следующее.
/* Create an array of all rotations of given boxes
For example, for a box {1, 2, 3}, we consider three
instances{{1, 2, 3}, {2, 1, 3}, {3, 1, 2}} */
Box rot[3*n];
int index = 0;
for (int i = 0; i < n; i++)
{
// Copy the original box
rot[index] = arr[i];
index++;
// First rotation of box
rot[index].h = arr[i].w;
rot[index].d = max(arr[i].h, arr[i].d);
rot[index].w = min(arr[i].h, arr[i].d);
index++;
// Second rotation of box
rot[index].h = arr[i].d;
rot[index].d = max(arr[i].h, arr[i].w);
rot[index].w = min(arr[i].h, arr[i].w);
index++;
}
Так, например, для ящика {1, 2, 3}, три ориентации будет
1 2 3
2 1 3
3 1 2
Но по мне, ориентации должны быть
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
Я понимаю, что мои дополнительные три комбинации связаны с чередованием длины и ширины между ними, сохраняя высоту одинаковой. Итак, в то время как я считаю, что 1 2 3 и 1 3 2 будут разными, исходный алгоритм считает их sam.
Однако я чувствую, что в этой задаче h, l, w и h, w, l, следует рассматривать как две отдельные ориентации, так как поле говорит: l = 3, w = 4, h = 5 может быть уложены выше коробки сказать, л = 4, т = 5, Н = 6, но не выше коробки л = 5, т = 4, ч = 6