まず、問題を分析しましょう。与えられたボックスの配列を考えます。各ボックスは幅、高さ、奥行きの3つの寸法を持っています。スタックする際には、ボックスの幅と奥行きは一致していなければなりませんが、高さには制限はありません。目標は、スタックの高さが最小になるようなボックスの組み合わせを見つけることです。
以下に、Pythonでの実装例を示します:
def calculate_min_height(boxes):
boxes.sort(key=lambda x: x[2], reverse=True)
dp = [0] * len(boxes)
dp[0] = boxes[0][1] # 最初のボックスの高さ
for i in range(1, len(boxes)):
max_height = 0
for j in range(i):
if boxes[i][0] < boxes[j][0] and boxes[i][1] < boxes[j][1]:
max_height = max(max_height, dp[j])
dp[i] = max_height + boxes[i][1]
return max(dp)
# 使用例:
boxes = [(1, 1, 1), (2, 2, 2), (3, 3, 3)]
min_height = calculate_min_height(boxes)
print("最小高さ:", min_height)
このコードでは、与えられたボックスの配列を boxes
として定義し、calculate_min_height
関数を使用して最小高さを計算しています。上記の例では、ボックスの組み合わせ (1, 1, 1)
、(2, 2, 2)
、(3, 3, 3)
を使用してスタックの最小高さを求めています。