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
  • 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

更新于: 2020年8月27日

143 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告