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
广告