Python 中將木板切割成正方形的最小成本
假設我們有一個長為 p、寬為 q 的木板;我們需要將該木板切割成 p*q 個正方形,使得切割成本儘可能低。每條邊的切割成本將給出。
因此,如果輸入類似於 X_slice = [3,2,4,2,5],Y_slice = [5,2,3]
則輸出將為 65
為了解決這個問題,我們將遵循以下步驟:
- res := 0
- horizontal := 1, vertical := 1
- i := 0, j := 0
- 當 i < m 且 j < n 時,執行以下操作
- 如果 X_slice[i] > Y_slice[j],則
- res := res + X_slice[i] * vertical
- horizontal := horizontal + 1
- i := i + 1
- 否則,
- res := res + Y_slice[j] * horizontal
- vertical := vertical + 1
- j := j + 1
- 如果 X_slice[i] > Y_slice[j],則
- total := 0
- 當 i < m 時,執行以下操作
- total := total + X_slice[i]
- i := i + 1
- res := res + total * vertical
- total := 0
- 當 j < n 時,執行以下操作
- total := total + Y_slice[j]
- j := j + 1
- res := res + total * horizontal
- 返回 res
示例
讓我們看看以下實現以更好地理解:
def minCost(X_slice, Y_slice, m, n): res = 0 X_slice.sort(reverse = True) Y_slice.sort(reverse = True) horizontal = 1 vertical = 1 i = 0 j = 0 while i < m and j < n: if (X_slice[i] > Y_slice[j]): res += X_slice[i] * vertical horizontal += 1 i += 1 else: res += Y_slice[j] * horizontal vertical += 1 j += 1 total = 0 while (i < m): total += X_slice[i] i += 1 res += total * vertical total = 0 while (j < n): total += Y_slice[j] j += 1 res += total * horizontal return res m = 6; n = 4 X_slice = [3,2,4,2,5] Y_slice = [5,2,3] print(minCost(X_slice, Y_slice, m-1, n-1))
輸入
[3,2,4,2,5],[5,2,3]
輸出
65
廣告