ปัญหา
มีอาร์เรย์ houses แทนตำแหน่งบ้าน และ k กล่องจดหมาย หาตำแหน่งวางกล่องจดหมาย k ตัว ให้ผลรวมระยะทางจากแต่ละบ้านถึงกล่องจดหมายที่ใกล้ที่สุดน้อยที่สุด
ตัวอย่าง
houses = [6,7,9,16,22], k = 2 → ผลลัพธ์ 9 (วางกล่องที่ 7 และ 18: |6-7|+|7-7|+|9-7|+|16-18|+|22-18| = 1+0+2+2+4=9)
ขั้นตอนการแก้ปัญหา
- เรียง
houses - ฟังก์ชัน
util(idx, n, k):- ถ้า
k == 1:core := houses[(n+idx)//2], คืนsum(|houses[i] - core| for i in idx..n) result := inf- วน
iจากidxถึงn:- ถ้า
n - i < k - 1: break result := min(result, util(idx, i, 1) + util(i+1, n, k-1))
- ถ้า
- คืน
result
- ถ้า
- คืน
util(0, len(houses)-1, k)
การนำไปใช้งาน (Python)
def solve(houses, k):
houses.sort()
def util(idx, n, k):
if k == 1:
core = houses[(n + idx) // 2]
return sum(abs(houses[i] - core) for i in range(idx, n + 1))
result = float('inf')
for i in range(idx, n + 1):
if n - i < k - 1:
break
result = min(result, util(idx, i, 1) + util(i+1, n, k - 1))
return result
return util(0, len(houses) - 1, k)
houses = [6,7,9,16,22]
k = 2
print(solve(houses, k))
อินพุต
[6,7,9,16,22], 2
เอาต์พุต
9