Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาต้นทุนขั้นต่ำในการส่งคนจำนวนเท่ากันไปยังสองเมืองที่แตกต่างกันใน Python


สมมติว่าเรามีรายการที่เรียกว่าค่าใช้จ่าย โดยที่ค่าใช้จ่าย[i] มี [c1, c2] ระบุว่าสำหรับบุคคลที่ i มีค่าใช้จ่าย c1 จำนวนในการไปถึงเมือง 0 และมีค่าใช้จ่าย c2 จำนวนในการไปถึงเมือง 1 เราต้องการให้ผู้คนจำนวนเท่ากันไปที่เมือง 0 เป็นเมือง 1 เรา ต้องหาต้นทุนขั้นต่ำที่ต้องการ

ดังนั้น ถ้า input เท่ากับ cost =[[2, 6],[10, 3],[4, 9],[5, 8]] ผลลัพธ์จะเป็น 17 เพราะคนที่ 0 และ 2 จะไปที่ เมือง 0 และบุคคลที่ 1 และ 3 ไปยังเมือง 1 ดังนั้นสำหรับเมือง 0 ค่าใช้จ่ายคือ 2+4 =6 และสำหรับเมือง 1 ค่าใช้จ่ายคือ 8+3 =11 รวมเป็น 17

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • s :=0
  • a :=รายการใหม่
  • สำหรับแต่ละคู่ (x, y) ในต้นทุน ทำ
    • s :=s + x
    • ใส่ (y - x) ลงใน a ต่อท้าย
  • เรียงลำดับรายการ
  • สำหรับฉันในช่วง 0 ถึงพื้นของ (ขนาดของ a / 2) - 1 ทำ
    • s :=s + a[i]
  • คืนสินค้า

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def solve(costs):
   s = 0
   a = []
   for x, y in costs:
      s += x
      a += (y - x,)
   a.sort()
   for i in range(len(a) // 2):
      s += a[i]
   return s

costs = [[2, 6],[10, 3],[4, 9],[5, 8]]
print(solve(costs))

อินพุต

[[2, 6],[10, 3],[4, 9],[5, 8]]

ผลลัพธ์

17